一、需求
如指定数为495,现在输入97,需要找到一个数97xxxxxxx(xx为未知),这个数在满足以97开头的同时,是指定数495的整数倍。
二、思路
遍历指定数的整数倍,看其开头几位是否与输入数相等。
三、实操
#define NUMBER 495 //定义NUMBER指定数,增强代码通用性。
//用于返回数字n对应的前num位数的整型。如former(8714,2)意为,返回8714的前两位数,结果为87。
int former_num(int n,int num) {
int ten = 1;
int i = 0;
for (i = 0; i < num; i++) {
ten *= 10;
}
return n > ten ? former_num(n / 10,i) : n % ten;
}
//用于计算整型的位数
int number_len(int n) {
int count = 0;
for (int i = 0; n != 0; i++) {
n /= 10;
count += 1;
}
return count;
}
int main() {
int n,i;
printf("请输出前几位数字:");
scanf("%d", &n);
int count = number_len(n); //调用 number_len函数计算位数
for (i = 0;; i++) { //遍历寻找符合要求的数
if (former_num(i * NUMBER,count) == n) { //调用former_num函数判断遍历的数前几位是否符合输入的数
break;
}
}
printf("数字%d的%d倍,前%d位数字符合您的输入,结果为:%d\n", NUMBER, i, count, i * NUMBER);
return 0;
}
四、结果
请输出前几位数字:
这里输入97。
数字495的196倍,前2位数字符合您的输入,结果为:97020
程序运行无误,97020正好是495的196倍。
五、其他演示
4,49,495输出结果相同。