输入结束条件为0;
#include <iostream>
using namespace std;
int main()
{
int n = -1;
while (cin>>n && n!=0)
{
int sum = 0;
int root = 0;
do
{
while(n)
{
sum += n%10;
n /= 10;
}
root = sum;
n = root;
sum = 0; //每做完一次之后sum重置为0
}while(!(root>0 && root<9));
cout << root <<endl;
}
return 0;
}
超时错误
问题分析:
问题没有指出整数是多少位的,即使使用unsigned long long类型,也有可能会溢出,所以,需要按照字符串来处理。
或者一边读入数据一边处理,省去字符串数组。
#include <iostream>
#include <cstring>
using namespace std;
int root(int n)
{
if(n<10)
return n;
int sum = 0;
while(n)
{
sum +=n%10;
n/=10;
}
return root(sum);
}
int main()
{
int n,sum;
char a[100];
while(cin>>a)
{
int length = strlen(a);
if(length==1&&a[0]=='0'){
break;
}
sum = 0;
for(int i=0; i<length; i++)
{
sum +=a[i]-'0';
}
cout<<root(sum)<<endl;
}
return 0;
}
思路:函数root用递归的方式求出和
逐个读取字符数组中的数字,将其求和,最后带入root函数计算
没通过Runtime Error (ACCESS_VIOLATION)
9余数定理
整体思路与刚才大致相同,逐个读取每一个字符,并将其转换为数字,相加求和,只是结果的处理有所不同,最后的结果要求是一位小数,那么只需要对结果对9取余即可。注意如果结果为0,相对应的结果为9;
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[100000];
int sum;
while(cin >> a)
{
int length = strlen(a); //求字符串a的长度
if(length==1 && a[0]=='0') //退出条件:长度为1或者输入的是0
{
break;
}
sum = 0;
for(int i=0; i<length; i++) //将各位数字加起来 --用字符逐个相加
{
sum += a[i] -'0'; //将字符转化为数字
}
sum %= 9;
if(sum == 0)
{
sum = 9;
}
cout << sum << endl;
}
return 0;
}
开一个数组,越界。。。
AC代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string a;
int sum;
while(cin >> a)
{
int length = a.size(); //求字符串a的长度
if(length==1 && a[0]=='0') //退出条件:长度为1或者输入的是0
{
break;
}
sum = 0;
for(int i=0; i<length; i++) //将各位数字加起来 --用字符逐个相加
{
sum += a[i] -'0'; //将字符转化为数字
}
sum %= 9;
if(sum == 0)
{
sum = 9;
}
cout << sum << endl;
}
return 0;
}
暴力求解AC码
#include <iostream>
#include <cstring>
using namespace std;
int root(int n)
{
if(n<10)
return n;
int sum = 0;
while(n)
{
sum +=n%10;
n/=10;
}
return root(sum);
}
int main()
{
int n,sum;
string a;
while(cin>>a)
{
int length = a.size();
if(length==1&&a[0]=='0'){
break;
}
sum = 0;
for(int i=0; i<length; i++)
{
sum +=a[i]-'0';
}
cout<<root(sum)<<endl;
}
return 0;
}