c语言-实现b进制的加法,我是先把两个数转化为十进制,然后求和在转换为b进制,可是一直出现问题,调试

问题描述

实现b进制的加法,我是先把两个数转化为十进制,然后求和在转换为b进制,可是一直出现问题,调试

#include
#include
int main()
{
int a;
char str1[40], str2[40];
while (scanf("%d%s%s", &a,str1,str2) != EOF)
{
int temp1 = 0, c1 = 1;
int length1 = strlen(str1);
printf("lenrht1=%dn", length1);
for (int i = length1-1; i >=0; i--)
{
int x;
if (str1[i] >= 0 && str1[i] <= 9)
x = str1[i] - '0';
else
x = str1[i] - 'A' + 10;
temp1 += x*c1;
c1 *= a;
}
int temp2 = 0, c2 = 1;
int length2 = strlen(str2);
for (int i = length2 - 1; i >= 0; i--)
{
int x;
if (str2[i] >= 0 && str2[i] <= 9)
x = str2[i] - '0';
else
x = str2[i] - 'A' + 10;
temp2 += x*c2;
c2 *= a;
}
int temp = temp1 + temp2;
char ans[40];
int size = 0;
while (temp != 0)
{
int x = temp%a;
ans[size++] =(x
temp /= a;
}
for (int i = size - 1; i >= 0; i--)
printf("%dn", ans[i]);
}
return 0;
}

解决方案

  • if (str1[i] >= 0 && str1[i] <= 9) 应改为if (str1[i] >= '0' && str1[i] <= '9')str2同理
  • ·ans[size++] =(x temp /= a;应改为ans[size++] =x; temp /= a;`
#include <cstdio>
#include <cstring>

int main()
{
    int a;
    char str1[40], str2[40];
    freopen("1.txt", "r", stdin);
    while (scanf("%d%s%s", &a,str1,str2) != EOF)
    {
        int temp1 = 0, c1 = 1;
        int length1 = strlen(str1);
        printf("length1=%dn", length1);
        for (int i = length1-1; i >=0; i--)
        {
            int x;
            if (str1[i] >= '0' && str1[i] <= '9')
                x = str1[i] - '0';
            else
                x = str1[i] - 'A' + 10;
            temp1 += x*c1;
            c1 *= a;
        }
        int temp2 = 0, c2 = 1;
        int length2 = strlen(str2);
        for (int i = length2 - 1; i >= 0; i--)
        {
            int x;
            if (str2[i] >= '0' && str2[i] <= '9')
                x = str2[i] - '0';
            else
                x = str2[i] - 'A' + 10;
            temp2 += x*c2;
            c2 *= a;
        }
        int temp = temp1 + temp2;
        char ans[40];
        int size = 0;
        while (temp != 0)
        {
            int x = temp%a;
            ans[size++] =x;
            temp /= a;
        }
        for (int i = size - 1; i >= 0; i--)
            printf("%d", ans[i]);
    }
    return 0;
}

解决方案二:

参考代码段
https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c

时间: 2024-09-19 09:58:53

c语言-实现b进制的加法,我是先把两个数转化为十进制,然后求和在转换为b进制,可是一直出现问题,调试的相关文章

C语言将24小时制转换为12小时制的方法_C 语言

本文实例讲述了C语言将24小时制转换为12小时制的方法.分享给大家供大家参考.具体实现方法如下: /* * 24小时制转换为12小时制 */ #include <stdio.h> int main() { int n, m; printf("Enter a 24-hour time:"); scanf_s("%d:%d",&n,&m); if (n < 0) { printf("Error1!\n"); syst

有哪位高人知道怎么将16进制表示的float64数据转换为10进制数据

问题描述 有哪位高人知道怎么将16进制表示的float64数据转换为10进制数据,我看到有人说"16进制:41F075D841873600转换后是:16.9013671875(十进制)"请问怎么转啊,帮我看看,以3fe36614aadabcc9为例,转出来是多少? 解决方案 解决方案二:41F075D841873600==4751427178548639232用计算器解决方案三:??16进制:41F075D841873600byte[]bs={0x00,0x36,0x87,0x41};

十进制转换成十六进制和16进制转2进制的实现

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() { int i,v; char bs[33]; char b[33]; char hs[9]; char h[9]; char s[4]; char *e; // 十进制整数转二进制串: i=1024; ltoa(i,b,2); sprintf(bs,"%032s&quo

c++中 int十进制数如何转int 16进制数

问题描述 c++中 int十进制数如何转int 16进制数 例如,我有int a = 100:但是我要获得int b = 0x100:如何把a转换成b. 解决方案 你这个只能是转成16进制字符串,如果是数值的话,你可以直接这样写,在内存中,不管什么进制,都是以二进制表示 解决方案二: int转6位16进制数. 解决方案三: 不妨看看 char *itoa( int value, char *string,int radix); 第三个参数是进制 解决方案四: 可以先转换成字符串,然后通过字符串再

c++-C++/C输入16进制数,转换为8进制,怎么做?多谢各路大神

问题描述 C++/C输入16进制数,转换为8进制,怎么做?多谢各路大神 C++能不能用控制输入流的方法做到这个呢?多谢各路大神 之前看到用字符串做的 好麻烦 能不能用输入流的功能做? 解决方案 用字符串并不麻烦: #include <iostream> int val(char * hex) { int n = 0; while (*hex != '') { if (*hex >= 'A' && *hex <= 'F') { n *= 16; n += *hex -

c-用C语言实现在键盘输入两个十进制数,然后在屏幕输出这两个数中较大的那个数

问题描述 用C语言实现在键盘输入两个十进制数,然后在屏幕输出这两个数中较大的那个数 我是这样写的: #include #include void main() { scanf("%d,%d",&a,&a,&b); c=max(a,b); print("max=%d",c); return 0; } 可是怎么就不对了呢?想不明白..啊-- 解决方案 1;如wolf所说,多一个&a,多return 0; 2;a,b,c没定义 3;我记得标

详解C语言求两个数的最大公约数及最小公倍数的方法_C 语言

求两个正整数的最大公约数       思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) (x >=y > 0).根据通式写出算法不难,这里就不给出了.这里给出<编程之美>上的算法,主要是为了减少迭代的次数.      对于x和y,如果y = k * y1, x= k * x1,那么f(x, y) = k * f(x1, y1).另外,如果x = p * x1,假

C# 16进制带符号的浮点数怎么转换为10进制

问题描述 下位机发来的4个字节的16进制浮点数怎么用c#转换成10进制的显示 解决方案 解决方案二:4个字节的16进制浮点数是如何存储的?不是按照浮点数存储的?如果是,那么直接用float接收就好了啊,根本就不需要转换.不管是16进制还是10进制,只要储存方法一致,字节应该是一样的啊解决方案三:floatf=BitConverter.ToSingle(bytes,0);解决方案四:引用2楼Libby1984的回复: floatf=BitConverter.ToSingle(bytes,0); 例

java 如何把十进制字符串转换为16进制字符串

问题描述 Stringstr1="07101311"要转换成16进制的070A110B也就是07--0710--0A13--1111--0B 解决方案 解决方案二:两两个的截取,然后将截取后的字符转为int,调用Integer.toHexString转为16进制,循环拼接到一起解决方案三:楼上说了.截取调用方法转换.解决方案四:07--0710--0A13--11这个应该是D11--0BStringstr="07101311";StringBuffersb=newS