高精度数相加乘一位数

发布时间 2023-04-27 14:28:41作者: Hi,小董先生

【问题描述】

  请编程实现,输入两个高精度数,输出它们的和的n倍。(1<=n<=9),注意: 这两个高精度数的位数不一定相同且有可能产生进位。

【输入输出描述】

  输入:  两行,第一行为高精度数a ,第二行为高精度数b。

  输出:  一行, 一个高精度数c ,表示a与b的和的n倍。

【样例输入】

  1111111222

  1111111223

  2

【样例输出】

  4444444890

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    char a[201], b[201];
    int a2[201]={}, b2[201]={}, c, c2[202]={}, d2[205]={};
    cin >> a >> b >> c;
    int lena = strlen(a), lenb = strlen(b);
    for(int i=0; i<=lena-1; i++)
        a2[lena-i] = a[i] - 48; // 下标从1开始的。 
    for(int i=0; i<=lenb-1; i++)
        b2[lenb-i] = b[i] - 48; // 下标从1开始的。 
    // 高精度加法
    int maxlen = max(lena, lenb), jw=0, i;
    for(i=1; i<=maxlen; i++)
    {
        int t = a2[i] + b2[i] + jw;
        jw = t/10;
        c2[i] = t%10;
    } 
    if(jw) c2[i] = jw;
    else i--;
    // 高精度*c(c是一位整数); 
    int jw2=0, j;
    for(j=1; j<=i; j++)
    {
        int t = c2[j]*c + jw2;
        jw2 = t/10;
        d2[j] = t%10;
    }
    if(jw2) d2[j]=jw2;
    else j--;
    for(int i=j; i>=1; i--)
        cout << d2[i];
    return 0;
}