上一期我们讲的是求一个数的数根,和本期唯一不同的是,数据范围不同了,上一期这个数是小于等于10的18次方的,这一期是小于等于10的1000次方的,开一个变量?肯定不行,我们需要再开一个数组,而且是char数组,在代码中我们需要在后面把char转化成int,这就要涉及ASCII的知识了!如何把存在char的数字变成能计算的数字呢?只需要-48!好了,放代码!
#include<bits/stdc++.h>
using namespace std;
char a[1001];//这就是我们需要求的那个数
int ans;
int js(int n){
int q=0;
while(n!=0) {
n/=10;
q+=n%10;
}//求数位和
if(q%10==q) return q;//如果它的数位和是小于10的,那么返回这个数,并且回到主函数中输出
else return js(q);//否则继续递归
}
int main(){
scanf("%s",a+1);
int l=strlen(a+1);//这个数的数位
for(int i=1;i<=l;i++) ans+=a[i]-'0';//char->int:只需要-48,其实零的ASCII码就是48哦!
if(ans%10==ans) cout<<ans;//如果这个数的数位和小于10,那么直接输出这个数
else cout<<js(ans);//否则使用函数
return 0;
}