用C语言输入两个整数a、b,求a b 。结果保证在long long int范围内。 输入格式: 测试数据有多组,处理到文件尾。每组测试输入两个正整数a,b(1≤a,b≤62)。 输出格式: 对于每组测试,输出a b 的结果。
时间: 2024-02-12 10:05:57 浏览: 102
c代码-6. 功能:编写程序,求两个非零整数之和。
好的,可以使用以下代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 100
int convert(char c) {
if (c >= '0' && c <= '9') {
return c - '0'; // 数字 0 - 9
} else if (c >= 'a' && c <= 'z') {
return c - 'a' + 10; // 小写字母 a - z
} else {
return c - 'A' + 36; // 大写字母 A - Z
}
}
char digit(long long n) {
if (n >= 0 && n <= 9) {
return n + '0'; // 数字 0 - 9
} else if (n >= 10 && n <= 35) {
return n - 10 + 'a'; // 小写字母 a - z
} else {
return n - 36 + 'A'; // 大写字母 A - Z
}
}
void pow(int base, int exp, char* result) {
int len = 0;
long long n = 1;
while (exp--) {
n *= base;
if (n > 1e18) { // 避免溢出
result[len++] = '0';
n /= base;
}
}
while (n) {
result[len++] = digit(n % base);
n /= base;
}
result[len] = '\0';
for (int i = 0, j = len - 1; i < j; i++, j--) {
char c = result[i];
result[i] = result[j];
result[j] = c;
}
}
int main() {
char a[MAX_N], result[MAX_N];
int b;
while (scanf("%s %d", a, &b) == 2) {
long long n = 0;
for (int i = 0; a[i]; i++) {
n = n * b + convert(a[i]);
}
pow(b, n, result);
printf("%s\n", result);
}
return 0;
}
```
这个程序首先定义了一个 `convert` 函数,将字符对应的数字或字母转换成整数。然后定义了一个 `digit` 函数,将一个整数转换成对应的数字或字母字符。接下来是一个 `pow` 函数,用于计算给定的进制的幂次方,结果保存在参数 `result` 所指向的字符数组中。
在主函数中,我们首先读入两个整数 a 和 b,然后将 a 转换成十进制数 n,使用 `pow` 函数将 n 转换成 b 进制数,并输出结果。
希望这个例子能够帮助到你。
阅读全文