输入一个字符串
a<b>c
表示将b进制数a,转换成c进制数输出
如30<10>8:将10进制数30转化为8进制数
输出:30<10>=36<8>
问题:如何提取出a,b,c进行后续进制转换?
#include<stdio.h>
int main()
{
int a, b, c,kase=0;
while (scanf("%d%d%d",&a,&b,&c)==3&&a&&b&&c){
kase++;
printf("Case: %d: %.*lf\n", kase, c, (double)a / b);
}
return 0;
}
```cpp
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a, b, c,kase=0;
while (cin>>a>>b>>c&&a&&b&&c){
kase++;
cout << "Case " << kase << ":" << setprecision(c) << (double)a / b << endl;
}
return 0;
}
温馨提示:小数点.后“”表示输出位数,具体的数据来自参数表
printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“”代替那个常量,然后在后面提供变量给“*”。
同样,小数点.前也可以添加*,也要用户输入一个位宽值来代替,表示输出的字符所占位宽。
我可以解决该问题。可以将问题分为以下步骤:
针对以上步骤,可以使用以下伪代码:
#include <stdio.h>
#include <stdlib.h>
// 十六进制输出方法
void print_hex(int n) {
char hex[16] = "0123456789ABCDEF";
putchar(hex[n / 16]);
putchar(hex[n % 16]);
}
int main() {
char input[10]; // 存放输入的字符串
int a, b, c; // 存放 a,b,c 三个数字
int decimal = 0; // 存放 a 的十进制数
int remainder[100]; // 存放转化后的余数
int i, j; // 循环计数器
// 输入字符串,例如 "30<10>8"
scanf("%s", input);
// 提取出 a,b,c 三个数字,例如 a=30, b=10, c=8
sscanf(input, "%d<%d>%d", &a, &b, &c);
// 将 a 转化为十进制
for (i = 0; i < 100 && a > 0; i++) {
remainder[i] = a % 10;
a /= 10;
decimal += remainder[i] * pow(b, i);
}
// 将十进制的 a 转化为 c 进制
i = 0;
while (decimal > 0) {
remainder[i] = decimal % c;
decimal /= c;
i++;
}
// 输出转化后的结果
printf("%d<%d>=", a, b);
for (j = i-1; j >= 0; j--) {
if (c == 16) { // 如果是十六进制,使用 print_hex 输出
print_hex(remainder[j]);
} else {
printf("%d", remainder[j]);
}
}
printf("<%d>\n", c);
return 0;
}
需要注意的地方:
以上就是使用 C 语言实现 n 进制转换的具体解决方案。
假设输入数据 char data[SIZE],找到 < 和 > 的位置,取出三个数分别放入三个不同的字符数组如 a[], b[], c[]。int i = atoi(a) 将字符数组a转换成整数i
#include<stdio.h>
int main()
{
int a, b, c,kase=0;
while (scanf("%d%d%d",&a,&b,&c)==3&&a&&b&&c){
kase++;
printf("Case: %d: %.*lf\n", kase, c, (double)a / b);
}
return 0;
}
```cpp
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a, b, c,kase=0;
while (cin>>a>>b>>c&&a&&b&&c){
kase++;
cout << "Case " << kase << ":" << setprecision(c) << (double)a / b << endl;
}
return 0;
}