overwhelmingly 2018-11-25 02:50 采纳率: 0%
浏览 1039

输入N位数,然后每次倍乘,知道数字0到九出现?

比如说输入123,含数字1,2,3,然后依次倍乘234,369,492。。。。。。直到0到9的数字都出现
最后输出最终的那个数字,

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-11-25 06:55
    关注

    如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢

    应该是123 246 369 ... 吧

    // Q714586.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    #include "string.h"
    
    #define MAX 500
    
    void i2ar(int i, int * r)
    {
        int j = 0;
        memset(r, 0, MAX * sizeof(int));
        while (i > 0)
        {
            r[j] = i % 10;
            j++;
            i /= 10;
        }
    }
    
    void arout(int * r)
    {
        int i = MAX - 1;
        while(1)
        {
            if (i == 0) break;
            if (r[i] != 0) break;
            i--;
        }
        for (int j = i; j >= 0; j--)
        {
            printf("%d", r[j]);     
        }
    }
    
    void mul(int *r, int * m1, int * m2)
    {
        int pre[MAX];
        memset(r, 0, MAX * sizeof(int));
        memset(pre, 0, MAX * sizeof(int));
        for (int i = 0; i < MAX; i++)
        {
            int carry = 0;
            for (int j = 0; j < MAX; j++)
            {
                int t = (pre[j] + r[j] + carry) % 10;
                carry = (pre[j] + r[j] + carry) / 10;
                r[j] = t;
            }
            memset(pre, 0, MAX * sizeof(int));
            carry = 0;
            for (int j = 0; j < MAX - i - 1; j++)
            {
                pre[j + i] = (m1[i] * m2[j] + carry) % 10;
                carry = (m1[i] * m2[j] + carry) / 10;
            }
        }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int n;
        scanf("%d", &n);
        int N[MAX], N1[MAX], M[MAX], R[MAX], R1[MAX];
        i2ar(n, N);
        i2ar(n, R);
        int i = 1;
        while (1)
        {
            i++;
            int cnt = 0;
            for (int j = 0; j < 10; j++)
            {
                for (int k = 0; k < MAX; k++)
                {
                    if (R[k] == j) { cnt++; break; }
                }
            }
            if (cnt == 10) 
            {
                printf("found!\n"); 
                break;
                }
            i2ar(i - 1, M);
            mul(N1, N, M);
            arout(R);
            printf("*");
            arout(N1);
            mul(R1, R, N1);
            memcpy(R, R1, sizeof(int) * MAX);
            printf("=");
            arout(R);
            printf("\n");
        }
        return 0;
    }
    
    
    

    123
    123*123=15129
    15129*246=3721734
    3721734*369=1373319846
    1373319846*492=675673364232
    675673364232*615=415539119002680
    415539119002680*738=306667869823977840
    306667869823977840*861=264041035918444920240
    264041035918444920240*984=259816379343749801516160
    found!
    Press any key to continue . . .

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?