数列之和
出处:桂电oj,网址:http://onlinejudge.guet.edu.cn/guetoj/problem/1020.html
有这样一类数列,例如, 2, 22, 222, 2222, 22222, 222222 3, 33, 333, 3333, 33333, 333333, 333333等 其中每个数的各位数上的值相同,例如,2,3,可以用M来表示 且每个数列所包含的数的个数不相同,可以用N来表示 你需要编写程序完成如下形式的数列求和 其中数列中每个数各位数的值M,以及数列所包含的数的个数N由键盘输入 求有M和N所决定的数列的和,并将其和输出
Input
输入包含2个数,M和N 其中M表示数列中每个数各位数上的值,N表示数列包含的数的个数 我们确保测试时( 0 < M < 10, 0 < N < 15 )
Output
输出由M和N所确定的数列之和
Sample Input
2 5 3 7
Sample Output
24690 3703701
//-------------------------------------------------------------
//当输入的数为2 11 时,一般的的int double的存不了的,要用数组,
//思路:
/* 2
* 22
* 222
* 2222
* ...
*+22222222
*————————————
*= ?
*
*/
//各位数相加,进位与十位相加...
#include <iostream>
using namespace std;
void shulie_sum(int a,int b);
int main()
{
int M,N;
cin >> M >> N;
shulie_sum(M,N);
return 0;
}
void shulie_sum(int a,int b)
{
int c = 0;int sum[16] = {0};
int s = 0;
for (int i = 0; i < 16; i++)
{
if (b == 0)
break;
sum[15-i] = (a*b) % 10 + s;//个位相加
if ((sum [15-i]) >= 10 && b != 1)//个位大于=10,进位
{
sum [15-i] = ((a*b)%10 + s )% 10;
}
s = (s + (a*b) ) / 10;
b--;
}
for (int i = 0; i < 16; )
{
if (sum[i] == 0)
{
i++;
}
else
for (int j = i; j < 16;j++)
{
cout << sum [i];
i++;
}
}
}