USACO又卡住了...好纠结~~~
这题纯水题了..题目意思是说给一个数..每位相加得到一个数..若这个数只有一位..那么就是答案...否则就要对得到的新数继续做这个操作..开始就这么写模拟..结果WA了..看discuss..晕倒..最大有2000位的数..题目中又没有哪里说清楚...好吧..最多2000位..假设每位都是9..那么第二次后最长的用int也存得下..所以就是最开始读进来用字符串..后面就是纯模拟了..
Program:
#include<iostream>
using namespace std;
char s[5005];
int main()
{
int k,ans;
while (gets(s))
{
if (s[0]=='0') break;
ans=0;
k=strlen(s)-1;
while (k>=0)
{
ans+=s[k]-'0';
k--;
}
while (ans>9)
{
k=0;
while (ans>0)
{
k+=ans%10;
ans/=10;
}
ans=k;
}
printf("%d\n",ans);
}
return 0;
}
本文针对USACO中的一道数位求和问题进行了解析,该问题要求对一个可能长达2000位的数字进行逐位求和直至结果为一位数。文章分享了使用字符串读取大数并模拟计算过程的解决方案。
275

被折叠的 条评论
为什么被折叠?



