http://oj.ecustacm.cn/problem.php?id=1385
题目上的废话太多,简言之就是给你一个数,计算它的各位数上的和。
如果结果大于10,接着用上一次的结果计算各位的和。直到各位的和小于10.
#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
string number;
int sum;
int i;
while(cin>>number)
{
sum=0;
for(i=0;i<number.length();i++)
{
sum+=number[i]-'0';//将字符串各位转换为整数
}
int temp=10000;
while(temp>=10)//如果和大于10
{
temp=0;
while(sum)
{
temp+=sum%10;
sum/=10;
}
sum=temp;//下一次的运算
}
printf("%d\n",temp);
}
return 0;
}
C++ 字符串流stringstream(附蓝桥杯2018年第九届真题缩位求和题解)
这是一位大神的写法,方法十分的巧妙。
C++ 字符串流stringstream(附蓝桥杯2018年第九届真题缩位求和题解)
算法的核心在于,把number(string)的各位的和保存到 sum(int)里。
sum把数导入到string的流里。
在把string流里的数导入到number(string)里。
当number的大小为1是说明是个位数,输出即可。
#include<cstdio>
#include<iostream>
#include<sstream>
using namespace std;
stringstream ss;
string number;
void F(string& number)
{
int sum=0;
for(int i=0;i<number.length();i++)
{
sum+=number[i]-'0';
}
ss.clear();
ss<<sum;
ss>>number;
}
int main(void)
{
int i;
while(cin>>number)
{
while(number.size()>1)
{
F(number);
}
cout<<number<<endl;
}
return 0;
}