uva10106 Product

题目:

The problem is to multiply two integers X, Y . (0 ≤ X, Y < 10250)
Input
The input will consist of a set of pairs of lines. Each line in pair contains one multiplyer.
Output
For each input pair of lines the output line should consist one integer the product.
Sample Input
12
12
2
222222222222222222222222
Sample Output
144
444444444444444444444444

其实这道题就是大数乘法,不过要注意前导零,另外结果为0的情况要特判。

参考代码:

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;//两位数和两位数相乘最多不超过4位数;

void bigmultiply(string a, string b) {
    int lena = a.size();
    int lenb = b.size();
    int lenr = lena + lenb;
    int *a1 = new int[lena];
    int *b1 = new int[lenb];
    int *result1 = new int[lenr];

    for (int i = 0;i < lenr;++i) {//这里要小心乱码,最好进行初始化;
        result1[i] = 0; 
    }

    int x, y, z;//记录个位十位;//10以内的两个数相乘结果均为2位数;
    int curr;//记录当前正在计算的位置, 倒序;
    
    for (int i = 0;i < a.size();++i) a1[i] = a[i] - '0';//将字符转换为数字;
    for (int i = 0;i < b.size();++i) b1[i] = b[i] - '0';
    /*  
    for (int i = 0;i < lena;++i) {
        cout << a1[i];
    }
    cout << endl;
    for (int j = 0;j < lenb;++j) {
        cout << b1[j];
    }   
    cout << endl;
    */
    for (int i = b.size()-1;i >= 0;--i) {
        curr = a.size() + i;//实际为lenr - (lenb - i)得到; 
        for (int j = a.size()-1;j >= 0;--j) {
            z = b1[i] * a1[j] + result1[curr];//上一位传过来的进位;
            //cout << "................" << z << endl;
            x = z % 10;//提取个位;
            y = z / 10;//提取十位;
            result1[curr] = x;
            curr--;
            result1[curr] += y;//相当于进位; 
        }
    }
    int pos = 0;
    for (int i = 0;i < lenr;++i) {
        if (result1[i] != 0) {
            pos = i;
            break;
        }
    }
    //cout << lenr << " " << pos << endl;   
    for (int i = pos;i < lenr;++i) {
        //cout << result1[i] << endl;
        cout << result1[i];
    }
    cout << endl;
    delete[] a1;
    delete[] b1;
    delete[] result1;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    string a, b;
    while (cin >> a >> b) {
        //cout << a << " " << b << endl;
        if (a == "0" || b == "0") cout << "0" << endl;
        else bigmultiply(a, b);
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 昨晚和朋友聊天,他突然对我说,九九,找个男朋友吧,找个懂你爱你珍惜你的人来陪你吧,别总这么一个人单着了好么?突然就...
    琉璃瓦的世界阅读 200评论 0 1
  • 坏的情绪是自带惯性的,一发而不可收拾,直到让人颓废到想要逃离,消失………… 一觉醒来,被无限放大的伤口已然痊愈,夜...
    云淡风轻_f3b4阅读 189评论 0 4