注册 登录
编程论坛 C++教室

求教:这个程序在用 DEV debug时,有死循环,执行时不会出现死循环。。。

Arther0919 发布于 2020-05-18 10:36, 1666 次点击
//大整数乘法(传统法)
//用string类 元素之间无法相乘
#include<iostream>
#include<string>
using namespace std;

int b1  = 0;
int max1 = 0;
int index = -1;

int main(){
    string s1, s2, s3, s4;
    int a[210] = {0}, b[210] = {0}, c[40010] = {0}, d[40010] = {0};
    cin >> s1 >> s2;
    int i = 0, j = 0 ;
    i = s1.length();
    j = s2.length();                   //字符转数字。字符串类字符不能运算
    for(int t = 0; t < i; t++){
        s1[t] -= 48;
        a[t+1] = s1[t];

    }
    for(int t = 0; t < j; t++){
        s2[t] = s2[t] - 48;
        b[t+1] = s2[t];
    }
    while(j > 0){
        index++;
        int z = 0;
        d[40010] = {0};
        b1 = 0;
        i = s1.length();
        for(int l = 0; l < index; l++){
            d[z] = 0;
            z++;
        }
        while(i+1 > 0){                                 //因为进位,第一位元素定义为0
            d[z++] = (a[i]*b[j] + b1)%10;
            b1 =(a[i--]*b[j--])/10;
        }
        if(max1 < z){
            max1 = z;
        }
        int b2 = 0;
        for(int k = 0; k < z+1; k++){
            c[k] = (c[k] + d[k] + b2)%10;
            b2 = (c[k] + d[k])/10;
        }
    }
    if(c[max1] != 0){
        for(int i = 0; i < max1 + 1; i++){
            cout << c[max1-i];
        }
    }
    else{
        for(int i = 0; i < max1; i++){
            cout << c[max1-i-1];
        }
    }
    return 0;
}
2 回复
#2
Arther09192020-05-18 10:47
回复 楼主 Arther0919
这个大整数乘法程序,5*7 = 45,5*9 = 55;哥哥们能看看哪的问题吗?
#3
rjsp2020-05-18 13:40
你这代码,若此多的变量,相当于进行了一次代码混淆,看不懂。

程序代码:
#include <iostream>
#include <string>
using namespace std;

std::string foo( const std::string& a, const std::string& b )
{
    std::string r( a.size()+b.size(), '0' );
    for( size_t i=0; i!=a.size(); ++i )
    {
        char carry = 0;
        for( size_t j=0; j!=b.size(); ++j )
        {
            carry += (a[a.size()-1-i]-'0') * (b[b.size()-1-j]-'0') + (r[r.size()-1-i-j]-'0');
            r[r.size()-1-i-j] = carry%10 + '0';
            carry /= 10;
        }
        r[a.size()-1-i] = carry%10 + '0';
    }
    size_t index = r.find_first_not_of("0");
    return index==std::string::npos ? "0" : r.substr(index);
}

int main( void )
{
    cout << foo("00099","000") << endl;
    cout << foo("00099","00098") << endl;
    cout << foo("5","7") << endl;
    cout << foo("5","9") << endl;
}

1