小码过海 2023-05-21 15:42 采纳率: 85.7%
浏览 34
已结题

c语言n进制之间的转换

输入一个字符串

a<b>c

表示将b进制数a,转换成c进制数输出
如30<10>8:将10进制数30转化为8进制数
输出:30<10>=36<8>
问题:如何提取出a,b,c进行后续进制转换?

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-21 18:14
    关注
    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7589628
    • 这篇博客也不错, 你可以看下C语言之数组设数组a包括10个整型元素,用C语言编程序,求出数组a中相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。
    • 除此之外, 这篇博客: 算法入门竞赛经典(第二版)部分答案中的 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤106,c≤100。输 入包含多组数据,结束标记为a=b=c=0。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • #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格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“
      ”代替那个常量,然后在后面提供变量给“*”。

      同样,小数点.前也可以添加*,也要用户输入一个位宽值来代替,表示输出的字符所占位宽。

    • 以下回答由chatgpt基于相关博客总结生成:

      我可以解决该问题。可以将问题分为以下步骤:

      1. 提取出给定字符串中的 a,b,c 三个数字;
      2. 将 a 转化为十进制数;
      3. 将十进制的 a 转化为 c 进制数;
      4. 输出转化后的结果。

      针对以上步骤,可以使用以下伪代码:

      #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;
      }
      

      需要注意的地方:

      1. 使用 sscanf 函数从字符串中提取出 a,b,c。这里的格式化字符串 "%d<%d>%d" 表示提取的数字格式为 "ac"。
      2. 对于转换后的每一位,需要判断是否需要按十六进制格式输出。可以使用 print_hex 函数实现;
        • 在使用 pow 函数计算 b 的幂时,需要包含 math.h 头文件。

      以上就是使用 C 语言实现 n 进制转换的具体解决方案。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 修改了问题 5月21日
  • 修改了问题 5月21日
  • 展开全部

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题