如题
给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和。 输入描述:测试数据有多组,以文件结尾。每行输入a,n(1<=a,n<=1000000)。输出描述:由于结果可能比较大,所以请输出答案mod 1000000007。
http://student.csdn.net/mcs/programming_challenges
------------------------------------------------------------------------------------------------------------------------------------一开始的思路是,比如 对于aa和a相加,直接将aa 取模之后 与a相加,然后对和再取模。
比如 8 为a 取模为13
正常 为 8+88=96 mod 13=5
或者 8+ 88mod13=8+10=18mod13=5
正常 8+88+888=984mod13=9
或者 5+888mod13=5+4=9
由此写出代码
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
unsigned int a=0;
unsigned int base=0;
unsigned int n=0;
unsigned int i=0,j=0;
unsigned long long sum=0;
unsigned int num=0;
//cout<<"sizeof "<<sizeof(long long int)<<endl;
freopen("test.txt","r",stdin);
while(cin>>a)
{
cin>>n;
base=a%1000000007;
i=1;
num=1;
while(1)
{
num=num*10;
if(a/10==0)
{
break;
}
i++;
a=a/10;
}
cout<<"num "<<num<<endl;
cout<<"i "<<i<<endl;
cout<<"base "<<base<<endl;
a=0;
for(int i=0;i<n;i++ )
{
cout<<"loop"<<endl;
cout<<"a*num "<<a*num<<endl;
cout<<"a*num+base "<<a*num+base<<endl;
a=(a*num+base)%1000000007;
cout<<"a "<<a<<endl;
sum=sum+a;
sum=sum%1000000007;
cout<<"sum "<<sum<<endl;
//sum=sum%1000000007;
cout<<"sum "<<sum<<endl;
}
cout<<sum<<endl;
sum=0;
num=0;
base=0;
}
return 0;
}
然而运行却出现错误
对于一组 测试 123456789 2
看输出
修改如下
<span style="white-space:pre"> </span><span style="color:#ff0000;">unsigned long long a=0;</span>
unsigned int base=0;
unsigned int n=0;
unsigned int i=0,j=0;
unsigned long long sum=0;
<span style="color:#ff0000;">unsigned long long num=0;</span>
123456789 3 来测试
run:
完成。
这里出错的原因是 int 和 int 相乘 默认和就是 int的 会有溢出
----------------------------------------------------------------------------------------------------------------
给一个 其他网友的 解答 过程吧 。
http://blog.csdn.net/fool_ran/article/details/41127633