比如说输入123,含数字1,2,3,然后依次倍乘234,369,492。。。。。。直到0到9的数字都出现
最后输出最终的那个数字,
应该是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 . . .