SJTUOJ 1015. 高精度乘法

问题内容

Description
输入2个整数a和b,输出a*b。

Input Format
输入有两行,第一行a,第二行b。

0≤a,b≤21000。

Output Format
输出只有一行,a*b。

Sample Input
44
3
Sample Output
132

代码实现

#include <stdio.h> 
#include <string.h> 
char a[100002]; 
char b[100002]; 
char result[100002] = {0}; 
int main(){
    int i = 0,j,curidx; 
    int lena = 0,lenb = 0,lenres; 
    char *add=a;
    char in; 
    while(1) { 
        in = getchar(); 
        if(in == '\n'){ 
            add[i]=0; 
            if(!lena){ 
                lena = i;
                add = b; 
                i = 0; 
            } 
            else{ 
                lenb = i; 
                break; 
            } 
        } else{ 
            add[i++] = in; 
        } 
    }
 
    lenres = lena + lenb;
    for (i = 0; i < lena;i++){
        for (j = 0; j < lenb ; j++){
            curidx = i + j;
            result[lenres - curidx - 1] += (a[lena - i - 1]-'0') * (b[lenb - j - 1] - '0'); 
            in = result[lenres - curidx - 1] / 10; 
            result[lenres - curidx - 1] = result[lenres - curidx - 1] % 10;
            result[lenres - curidx - 2] += in;
        }
    }
    for (i = lenres - 1; i >= 0;i--){
        if(result[i] > 10){
            result[i - 1] += result[i] / 10;
        }
        result[i] = (result[i] % 10) + '0';
    }
    for (i = 0; i < lenres;i++)
    {
        if(result[i]!='0'){
            break;
        }
    }
    if(i > lenres -1){
        i = lenres - 1;
    }
    puts(&result[i]);
    return 0; 
}

时间:8ms 空间:8508kb

猜你喜欢

转载自blog.csdn.net/Phoenix5443/article/details/85215730