求助去前导零出现灵异事件
  • 板块学术版
  • 楼主zhizhizhiwang
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/24 11:25
  • 上次更新2023/12/24 14:11:17
查看原帖
求助去前导零出现灵异事件
776232
zhizhizhiwang楼主2023/12/24 11:25

问题代码:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 55;

typedef vector<int> BI;
typedef unsigned long long ULL;

/*
 num 1 0 0 0 0 0
 v_i 6 5 4 3 2 1
*/

void print(BI x)
{
    int lx = x.size();
    
    for (int i = lx ; i >= 1; i -- )
    {
        printf("%d ",x[i]);
    }
}

BI in(ULL x)
{
    BI c(64);

    for(int i = 1;x != 0;i++)
    {
        printf("%d %d\n",x,x%10);
        c[i] = (x%10);
        x /= 10;
    }
    print(c);
    printf("\n");
    
    while(c.size() != 0 and c.back() == 0)c.pop_back();
    
    print(c);
    printf("\n");
    
    return c;
}

BI operator + (const BI a,const BI b)
{
    
    int la = a.size();
    int lb = b.size();
    
    BI c(max(la,lb) + 5);
    
    for (int i = 1; i <= la; i ++ )
    {
        c[i] += a[i];
    }
    for (int i = 1; i <= lb; i ++)
    {
        c[i] += b[i];
    }
    
    for (int i = 1; i <= max(la,lb); i ++ )
    {
        c[i + 1] += c[i] / 10;
        c[i] %= 10;
    }
    while(c.size() != 0 and c.back() == 0)c.pop_back();
    return c;
}




BI operator * (const BI a, const BI b)
{
    int la = a.size();
    int lb = b.size();
    
    BI c(la + lb + 2);
    
    //print(c);
    
    for(int i = 1; i <= la;i++)
    {
        for(int j = 1;j <= lb;j++)
        {
            c[i+j-1] += a[i] * b[j];
            printf("i : %d j:%d c : %d\n",i,j,c[i+j-1]);
            
        }
    }
    
    print(c);
    
    while(c.size() != 0 and c.back() == 0)c.pop_back();
    
    return c;
}

int main()
{
    BI a,b;
    a = in(ULL(100000000));
    b = in(ULL(222222222));

    BI c = a*b;

    //print(c);
}

输出如下:(去除了一些不必要的避免过长)

100000000 0
10000000 0
1000000 0
100000 0
10000 0
1000 0
100 0
10 0
1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
131761 1 0 0 0 0 0 0 0 0 
222222222 2
22222222 2
2222222 2
222222 2
22222 2
2222 2
222 2
22 2
2 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 
273 2 2 2 2 2 2 2 2 2 

i : 9 j:1 c : 2
i : 9 j:2 c : 2
i : 9 j:3 c : 2
i : 9 j:4 c : 2
i : 9 j:5 c : 2
i : 9 j:6 c : 2
i : 9 j:7 c : 2
i : 9 j:8 c : 2
i : 9 j:9 c : 2
i : 9 j:10 c : 273
i : 10 j:1 c : 196
i : 10 j:2 c : 196
i : 10 j:3 c : 196
i : 10 j:4 c : 196
i : 10 j:5 c : 196
...

求助去前导零前一切正常,去完在最末尾出现一个奇怪的数

2023/12/24 11:25
加载中...