2-06. 數列求和(20)
給定某數字A(1<=A<=9)以及非負整數N(0<=N<=100000),
求數列之和S = A + AA + AAA + … + AA…A(N個A)。例如A=1, N=3時,S = 1 + 11 + 111 = 123。
輸入格式說明:
輸入數字A與非負整數N。
輸出格式說明:
輸出其N項數列之和S的值。
樣例輸入與輸出:
序號 | 輸入 | 輸出 |
1 |
1 3 |
123 |
2 |
6 100 |
7407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407340 |
3 |
1 0 |
0 |
#include <cstdio>
#include <cstdlib>
using namespace std ;
long num[100005] , N , A ;
void init ()
{
for (long i = 0 ; i < N ; i++ )
{
num[i] = N-i ;
}
}
void calculate()
{
long mod, carry = 0 ;
for( long i = 0 ; i < N ; i++ )
{
mod = (num[i]*A + carry)%10 ;
carry = ( carry+ num[i]*A ) / 10 ;
num[i] = mod ;
}
}
int main(void)
{
scanf("%ld%ld",&A,&N ) ;
if( N == 0 )
{
printf("0") ;
// system("pause") ;
return 0 ;
}
init() ;
calculate() ;
for(long i = 0 ; i < N ; i++ )
{
printf("%ld",num[N-i-1]) ;
}
// system("pause") ;
return 0 ;
}
#include <cstdio>
#include <cstdlib>
using namespace std ;
long num[100005] , N , A ;
bool overFlow = false ;
void init ()
{
for (long i = 0 ; i < N ; i++ )
{
num[i] = N-i ;
}
}
void calculate()
{
long mod, carry = 0 ;
for( long i = 0 ; i < N ; i++ )
{
mod = (num[i]*A + carry)%10 ;
carry = ( carry+ num[i]*A ) / 10 ;
num[i] = mod ;
}
if ( carry != 0 )
{
overFlow = true ;
}
num[N] = carry ;
}
int main(void)
{
scanf("%ld%ld",&A,&N ) ;
if( N == 0 )
{
printf("0") ;
// system("pause") ;
return 0 ;
}
init() ;
calculate() ;
if ( overFlow )
{
printf("%ld", num[N]) ;
}
for(long i = 0 ; i < N ; i++ )
{
printf("%ld",num[N-i-1]) ;
}
// system("pause") ;
return 0 ;
}
修改的地方是這樣的,在最終進行 num[N-1] 與 A 乘法的時候,如果出現溢位 ,即 carry 的數值不爲 0 的時候,