鱼C论坛

 找回密码
 立即注册
查看: 2847|回复: 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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

  3. int sum = 0;

  4. int main() {
  5.     int num;
  6.     int ch;
  7.     while(scanf("%x", &num) != EOF) {
  8.         sum += num;
  9. input:
  10.         ch = getchar();
  11.         if(ch == ' ' || ch == '\t' || ch == '\v' || ch == '\f') goto input;
  12.         if(ch == '\n') {
  13.             printf("%d\n", sum);
  14.             sum = 0;
  15.         }
  16.         else ungetc(ch, stdin);
  17.     }
  18.     return 0;
  19. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  2. int main(void)
  3. {
  4.         int c , d[20][10000] , i , j , k , s                                              ;
  5.         char a[10002]                                                                     ;
  6.         for(i = 0 ; ; i ++) {
  7.                 gets(a)                                                                   ;
  8.                 if(a[0]) {
  9.                         for(c = 1 , j = k = 0 ; a[j] ; j ++) {
  10.                                 for(; a[k] && (a[k] == ' ' || a[k] == '\t') ; k ++)       ;
  11.                                 if(a[k]) {
  12.                                         sscanf(& a[k] , "%x" , & d[i][c ++])              ;
  13.                                         for(; a[k] && a[k] != ' ' && a[k] != '\t' ; k ++) ;
  14.                                 }
  15.                         }
  16.                         d[i][0] = c - 1                                                   ;
  17.                 } else {
  18.                         break                                                             ;
  19.                 }
  20.         }
  21.         for(k = i , i = 0 ; i < k ; i ++) {
  22.                 for(s = 0 , j = 1 ; j < d[i][0] + 1 ; j ++) s += d[i][j]                  ;
  23.                 printf("%d\n" , s)                                                        ;
  24.         }
  25. }
复制代码

        编译、运行实况
  1. D:\00.Excise\C>g++ -o x x.c

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

  6. 15
  7. 23
  8. 4445

  9. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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