アモイ大学の線の下でプログラミングの試合の第1題:和を求めます


テーマの詳細
aとnを与えて、a+aaa+aaa+aaa+...+a...a(n個のa)の和.
説明を入力:
テストデータには複数のグループがあり、ファイルで終わります.各行にa,n(1<=a,n<=1000000)を入力する.
出力の説明:
結果は大きいかもしれませんので、mod 100000007を出力してください.
解答説明
サンプルを入力:
1 10
出力サンプル:
234567893
式から,後の数は前から出すことができ,前の数に10*pow(10,aの桁数)を乗じると,後の数が得られることが分かった.
コード:
#include <iostream>
#include <cstdio>
using namespace std;
const int mod=1000000007;
int main()
{
    long long a,b,c,ans,n,m,temp;
    while(~scanf("%I64d%I64d",&a,&n))
    {
        m=0;
        temp=a;
        while(temp)
        {
            m++;
            temp=temp/10;
        }
        c=1;
        for(long long i=1;i<=m;i++)
        c=c*10;
        ans=a%mod;
        b=a%mod;
        for(long long i=2;i<=n;i++)
        {
           b=(b*c+a)%mod;
           ans=(ans+b)%mod;
        }
        printf("%I64d
",ans); } return 0; }