鱼C论坛

 找回密码
 立即注册
查看: 2597|回复: 3

求和问题

[复制链接]
发表于 2021-3-24 22:18:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
计算若干十六进制数的和。
输入
输入有若干行,每行为由空格分隔的若干数十六进制整数(不超过10000个),如:
5 A
输出
控制台输出,对每行输入,输出该行十六进制数的和,用十进制表示。如:
15
示例输入
0xB 0xC
示例输出
23

我的程序有些正确有些错误为啥呀
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int sum = 0;

void HEX_DEC(int num, int N) {
        if (num > N - 1) {
                HEX_DEC(num / N, N);
        }
        num = num % N;
}

int main() {
        int num;
        while (scanf("%x", &num) != EOF) {
                HEX_DEC(num, 10);
                sum += num;
                while (getchar() == '\n')
                        printf("%d\n", sum);
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-24 22:51:28 | 显示全部楼层
本帖最后由 jackz007 于 2021-3-24 23:00 编辑

       每行键入 10000 个数会超过系统设置的键盘缓冲区的最大长度,根本不可能做得到!
       难道用死循环?确定输入结束的条件是什么?硬性规定一共输入 n 行,每行 m 个数据?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-24 22:59:15 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>

int sum = 0;

int main() {
    int num;
    int ch;
    while(scanf("%x", &num) != EOF) {
        sum += num;
input:
        ch = getchar();
        if(ch == ' ' || ch == '\t' || ch == '\v' || ch == '\f') goto input;
        if(ch == '\n') {
            printf("%d\n", sum);
            sum = 0;
        }
        else ungetc(ch, stdin);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-25 03:04:06 | 显示全部楼层
本帖最后由 jackz007 于 2021-3-25 03:10 编辑

        真正的按行输入,每行可以输入 "任意" 多个数
        最后输入空回车结束输入
#include <stdio.h>

int main(void)
{
        int c , d[20][10000] , i , j , k , s                                              ;
        char a[10002]                                                                     ;
        for(i = 0 ; ; i ++) {
                gets(a)                                                                   ;
                if(a[0]) {
                        for(c = 1 , j = k = 0 ; a[j] ; j ++) {
                                for(; a[k] && (a[k] == ' ' || a[k] == '\t') ; k ++)       ;
                                if(a[k]) {
                                        sscanf(& a[k] , "%x" , & d[i][c ++])              ;
                                        for(; a[k] && a[k] != ' ' && a[k] != '\t' ; k ++) ;
                                }
                        }
                        d[i][0] = c - 1                                                   ;
                } else {
                        break                                                             ;
                }
        }
        for(k = i , i = 0 ; i < k ; i ++) {
                for(s = 0 , j = 1 ; j < d[i][0] + 1 ; j ++) s += d[i][j]                  ;
                printf("%d\n" , s)                                                        ;
        }
}
        编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
5 A
0xB 0xC
0x1 0x2 0x3 0x4 0x55 0xff 0xfff

15
23
4445

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 00:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表