用户输出
1 35
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#81607 | #106. zxh的同值猜想 | Accepted | 100 | 42 ms | 384 K | C / 1.3 K | Ypy | 2022-12-07 0:11:08 |
#include <stdio.h>
#include <string.h>
#include <math.h>
#define Max 100 //输入数字限定最大值,视情况而更改
int gy(int a, int b) {
if (a == b) {
return a;
} else if (a > b) {
return gy(a - b, b);
} else {
return gy(a, b - a);
}
}
int main() {
char x[Max], y[Max];
scanf("%s %s", x, y);
int l1 = (int)strlen(x), l2 = (int)strlen(y), x1 = 0, y1 = 0;
//对两数字进行数乘操作,和为z数组;
int a[Max] = { 0 }, b[Max] = { 0 };
for (int i = 0, n = l1 - 1; i < l1; i++, n--) {
a[i] = x[n] - '0';
x1 += a[i] * (int)pow(10, i);
}
for (int i = 0, n = l2 - 1; i < l2; i++, n--) {
b[i] = y[n] - '0';
y1 += b[i] * (int)pow(10, i);
} //将数字按位置从0到最大位保存到数组里
int pro[Max * Max] = { 0 };
for (int i = 0; i < l1; i++) {
for (int j = 0; j < l2; j++) pro[i + j] += a[i] * b[j];
} //对应数相乘,不考虑进位,保持对应列数值。
for (int i = 0; i < l1 + l2; i++) {
if (pro[i] > 9) {
pro[i + 1] += (pro[i] / 10);
pro[i] %= 10;
}
} //进位
int begain = l1 + l2 - 1;
for (; pro[begain] == 0; begain--) {
}
//乘法完成,且最高位储存在begain处;
//完成除法运算。
int z = gy(x1, y1);
for (int i = begain; i >= 0; i--) {
if (i > 0) {
pro[i - 1] += (pro[i] % z * 10);
}
pro[i] /= z;
}
for (; pro[begain] == 0; begain--) {
}
printf("%d ", z);
for (int i = begain; i >= 0; i--) {
printf("%d", pro[i]);
}
}
用户输出
7 14057750781710727
系统信息
Exited with return code 0
用户输出
2 28974979732195296
系统信息
Exited with return code 0
用户输出
3 19260972967518327
系统信息
Exited with return code 0