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