大数相减 计算n个a相减
输入两个整数a(大于等于1且小于等于9)和n(大于等于1且小于等于80),编程求得并输出下面等式的值:例如:若输入的a为5,n为6,则要计算下面公式的值:【输入形式】从标准输入读入整数a和n,两者之间以一个空格分隔。【输出形式】在标准输出上输出公式的计算结果。【样例1输入】5 6【样例1输出】493830【样例1说明】输入的a为5,n为6,按照上述公式计...
·
输入两个整数a(大于等于1且小于等于9)和n(大于等于1且小于等于80),编程求得并输出下面等式的值:
例如:若输入的a为5,n为6,则要计算下面公式的值:
【输入形式】
从标准输入读入整数a和n,两者之间以一个空格分隔。
【输出形式】
在标准输出上输出公式的计算结果。
【样例1输入】
5 6
【样例1输出】
493830
【样例1说明】
输入的a为5,n为6,按照上述公式计算的结果为493830。
【样例2输入】
5 20
【样例2输出】
49382716049382716060
#include <iostream>
using namespace std;
int a[1000], b[1000];
int x, n;
int main()
{
cin >> x >> n;
for (int i = 0; i < n; i++)
{
a[i] = b[i] = x; //a是被减数,b是用来减的
}
int t = n - 1; //记录b中x的个数,就是看看减几个x
//b不变 a变
for (int i = 0; i < n; i++) //一共减n次
{
for (int j = 0; j < t; j++) //控制b的数量
{
if (a[j] - b[j] < 0) //稍微难点的是会有借位
{
a[j] = a[j] + 10 - b[j];
int p = 1;
while (a[j + p] == 0) //注意可能不只是向前一位借 ,我第一次就是被坑了这
{
a[j + p] = 9;
p++;
}
a[j + p]--; //最后借的就是前面第一个不是0的数的它
}
else
{
a[j] = a[j] - b[j];
}
}
// cout << endl;
t--;
}
//防止最前的是0做的标记
int k = 0;
for (int i = n - 1; i >= 0; i--)
{
if (a[i] != 0)//标记
k = 1;
if (k == 0 && a[i] == 0)
continue;
cout << a[i];
}
return 0;
}
更多推荐


所有评论(0)