3.2趣味整数之自守数

时间:2021-12-15 11:11:48

1.问题描述
3.2趣味整数之自守数
2.问题分析
3.2趣味整数之自守数
3.算法设计
3.2趣味整数之自守数
4.请给定数的长度
int numberOfDigit(long num){

int count=0;
while (num!=0) {
num/=10;
count++;
}

return count;

}

5.分离一个定数最后的几位
//分离一个定数 的最后k位
int lastNumber(long objectNumber,int k){
int count=0;
int result=0;
while (objectNumber!=0) {
int num= objectNumber%10;
objectNumber/=10;
result+= num*pow(10, count);
count++;
if (count==k) {
break;
}
}
return result;
}

5核心算法
//分析与算法设计 若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。
//分析手工方式下整数平方(乘法)的计算过程,以376为例
//376X376
//2256 第一个部分积=被乘数*乘数的倒数第一位
//2632 第二个部分积=被乘数*乘数的倒数第二位
//1128 第三个部分积=被乘数*乘数的倒数第三位

//核心算法,以上三部分积求和,然后分离最后三位
long sqrtnum(int num){

int length=numberOfDigit(num);
long result=0;
int count=0;
int mul=num;
while (mul!=0) {

int s=mul%10;

mul/=10;
result+=num*s*pow(10, count);

count++;
if (count==length) {
break;
}

}
return result;

}

6完整程序

int numberOfDigit(long num){

int count=0;
while (num!=0) {
num/=10;
count++;
}

return count;

}

//分离一个定数 的最后k位
int lastNumber(long objectNumber,int k){
int count=0;
int result=0;
while (objectNumber!=0) {
int num= objectNumber%10;
objectNumber/=10;
result+= num*pow(10, count);
count++;
if (count==k) {
break;
}
}

return result;

}

//分析与算法设计 若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。
//分析手工方式下整数平方(乘法)的计算过程,以376为例
//376X376
//2256 第一个部分积=被乘数*乘数的倒数第一位
//2632 第二个部分积=被乘数*乘数的倒数第二位
//1128 第三个部分积=被乘数*乘数的倒数第三位

//核心算法,以上三部分积求和,然后分离最后三位
long sqrtnum(int num){

int length=numberOfDigit(num);
long result=0;
int count=0;
int mul=num;
while (mul!=0) {

int s=mul%10;

mul/=10;
result+=num*s*pow(10, count);

count++;
if (count==length) {
break;
}

}
return result;

}

int main(int argc,char*argv[]){

for (long number=1; number<100000; number++) {

int length=numberOfDigit(number);//求长度

long sqrtNum=sqrtnum(number);//求平方
if (lastNumber(sqrtNum, length)==number) {
printf(" 自守数:%ld\n",number);
}
}

return 0;

}

7运行结果
自守数:1
自守数:5
自守数:6
自守数:25
自守数:76
自守数:376
自守数:625
自守数:9376
自守数:90625

8优化拓展
3.2趣味整数之自守数
9优化后完整程序框架
3.2趣味整数之自守数
10完整程序
3.2趣味整数之自守数