太菜了,还是看别人的思路才自己写出来。
#include <iostream>
using namespace std;
//本质是一个进位问题
//9999
// 999
// 99
// 9
int main()
{
int A, N;
cin >> A >> N;
int* p = new int[(wint_t)(N + 2)];//为P预留一个p[0]和最后还可能升一位
int adv = 0;//进位值
int bas = 1;//本位值
for (int i = N; i >= 1; i--)
{
int temp = i * A + adv;//相当于最右边一位相加,
p[bas] = temp % 10;//取余为本位
adv = temp / 10;//进位为取整
if (i != 1)
{
bas++;//当没有达到最高位
}
else if(adv) //adv存在时,向更高位为0的地方+adv
{
p[++bas] = adv;//当达到最高位
}
}
//上方存入数据是从左往右存入
//故输出时应该从右往左
for (int j = bas; j >= 1; --j)
{
cout << p[j];
}
cout << endl;
delete[] p; //释放动态数组
return 0;
}