HDU2106 decimal system
生活随笔
收集整理的這篇文章主要介紹了
HDU2106 decimal system
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
問題鏈接:HDU2106 decimal system。入門訓(xùn)練題,用C語言編寫程序。
這個(gè)問題是輸入的數(shù)據(jù)進(jìn)制各不相同要進(jìn)行求和。
關(guān)鍵是函數(shù)atoi()的原理要玩的很熟悉,才能夠隨心所欲地解決進(jìn)制有關(guān)的問題。
這里給出兩種程序,一種是直接對(duì)字符串進(jìn)行處理(使用函數(shù)strtok()切分值部分?jǐn)?shù)字串和進(jìn)制部分字符串),另外一種是暫時(shí)將不同進(jìn)制的數(shù)當(dāng)作10進(jìn)制數(shù)進(jìn)行處理,然后再轉(zhuǎn)換。
使用函數(shù)strtok()的AC程序如下:
/* HDU2106 decimal system */#include <stdio.h> #include <stdlib.h> #include <string.h>int main(void) {int n, base, val, sum, i;char s[1024];char delim[] = "()", *p, *q;while(scanf("%d", &n) != EOF) {// 和清零sum = 0;// 讀入各個(gè)數(shù)據(jù),進(jìn)行求和處理for(i=1; i<=n; i++) {scanf("%s", s);// 使用函數(shù)strtok將字符串分為兩個(gè)數(shù)字串p = strtok(s, delim);q = strtok(NULL, delim);// 算出進(jìn)制base = atoi(q);// 根據(jù)進(jìn)制base進(jìn)行atoi計(jì)算val = 0;while(*p) {val *= base;val += *p - '0';p++;}// 累加sum += val;}// 輸出結(jié)果printf("%d\n", sum);}return 0; }
進(jìn)制轉(zhuǎn)換的AC程序如下:
/* HDU2106 decimal system */#include <stdio.h> #include <stdlib.h>// 進(jìn)制轉(zhuǎn)換:將10進(jìn)制的val轉(zhuǎn)為base進(jìn)制的值 int change(int val, int base) {int result = 0, weight = 1;while(val) {result += (val % 10) * weight;val /= 10;weight *= base;}return result; }int main(void) {int n, base, val, sum, i;while(scanf("%d", &n) != EOF) {// 和清零sum = 0;// 讀入各個(gè)數(shù)據(jù),進(jìn)行求和處理for(i=1; i<=n; i++) {scanf("%d(%d)", &val, &base);// 累加if(base == 10)sum += val;elsesum += change(val, base);}// 輸出結(jié)果printf("%d\n", sum);}return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/tigerisland/p/7564633.html
總結(jié)
以上是生活随笔為你收集整理的HDU2106 decimal system的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用phpmaill发送邮件的例子
- 下一篇: ueditor1_4_3_3编辑器的应用