与琪热恋 发表于 2021-3-24 22:18:25

求和问题

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

我的程序有些正确有些错误为啥呀{:10_243:}
#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;
}

jackz007 发表于 2021-3-24 22:51:28

本帖最后由 jackz007 于 2021-3-24 23:00 编辑

       每行键入 10000 个数会超过系统设置的键盘缓冲区的最大长度,根本不可能做得到!
       难道用死循环?确定输入结束的条件是什么?硬性规定一共输入 n 行,每行 m 个数据?

人造人 发表于 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;
}

jackz007 发表于 2021-3-25 03:04:06

本帖最后由 jackz007 于 2021-3-25 03:10 编辑

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

int main(void)
{
      int c , d , i , j , k , s                                              ;
      char a                                                                     ;
      for(i = 0 ; ; i ++) {
                gets(a)                                                                   ;
                if(a) {
                        for(c = 1 , j = k = 0 ; a ; j ++) {
                              for(; a && (a == ' ' || a == '\t') ; k ++)       ;
                              if(a) {
                                        sscanf(& a , "%x" , & d)            ;
                                        for(; a && a != ' ' && a != '\t' ; k ++) ;
                              }
                        }
                        d = c - 1                                                   ;
                } else {
                        break                                                             ;
                }
      }
      for(k = i , i = 0 ; i < k ; i ++) {
                for(s = 0 , j = 1 ; j < d + 1 ; j ++) s += d                  ;
                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>
页: [1]
查看完整版本: 求和问题