1 条题解

  • 0
    @ 2025-4-9 20:23:46

    真的转换成高精度表示法的写法

    #include <bits/stdc++.h>
    using namespace std;
    string A, B;
    // a/13==c...r
    int aLen, a[105];
    int cLen, c[105];
    int r; 
    int main()
    {
        cin >> A ;
        // 翻转并转成对应的整数
        aLen = A.size();
        for (int i = 0; i < aLen; i++)
            a[i] = A[aLen - 1 - i] - '0';
        // 除以13
        cLen = aLen;
    	r = 0; 
        for(int i = aLen - 1; i >= 0; i--) 
        {
        	r = r * 10 + a[i];
        	c[i] = r / 13; 
    		r = r % 13;
    	}
        // 去掉前导 0
        while (cLen > 1 && c[cLen - 1] == 0)
            cLen--;
        // 输出
        for (int i = cLen - 1; i >= 0; i--)
            cout << c[i];
        cout << '\n';
    	cout << r; 
        return 0;
    }
    
    

    更简单的写法

    #include <bits/stdc++.h>
    using namespace std;
    string N;
    int ans[105]; // 商
    int r;        // 余数
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> N;
    
        r = 0;
        for (int i = 0; i < N.size(); i++)
        {
            // 之前的余数后面补上当前数字作为被除数
            r = r * 10 + (N[i] - '0');
            // 计算商
            ans[i] = r / 13;
            // 更新余数
            r = r % 13;
        }
    
        // 找到第一个非 0 的商的数位
        // 如果到了最后一个数位还是 0,那要保留最后的位置
        int pos = 0;
        while (ans[pos] == 0 &&
               pos != (int)N.size() - 1)
            pos++;
        // 输出
        for (int i = pos; i < N.size(); i++)
            cout << ans[i];
        cout << "\n";
        cout << r << "\n";
        return 0;
    }
    
    • 1

    信息

    ID
    13415
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    (无)
    递交数
    29
    已通过
    14
    上传者