您好,登錄后才能下訂單哦!
1、問題描述
(1)、現在從鍵盤輸入一個整數(以%d格式符輸入),要求以裝換成字符串的形式輸出;
(2)、現在從鍵盤輸入一個小數和小數位數(%lf%d),要求以字符串的形式輸出;
這2個問題本身并不難,但是考慮全面和從算法上的優化確實不容易的,需要仔細認真的考慮!
2、用C實現
在VC下面用的VC++6.0版本實現
#include<stdio.h> void printfInt(int data); void printfDouble(double data, int count); void printfDouble(double data, int count){ int d = (int)data; double x = data - d; int i, tmp; int p = 1; printfInt(d); printf("."); for(i = 0; i < count; i++){ p *= 10; } tmp = (int)(p*x+0.5);//在強轉時,由于有截斷誤差,所以加上0.5,保證了小數點最后一位的取值是正確的。 printfInt(tmp); } void printfInt(int data){ int q = 1; if(data > 1000000000){ q = 1000000000; }else if(data > 100000000){ q = 100000000; }else if(data > 10000000){ q = 10000000; }else if(data > 1000000){ q = 1000000; }else if(data > 100000){ q = 100000; }else if(data > 10000){ q = 10000; }else if(data > 1000){ q = 1000; }else if(data > 100){ q = 100; }else if(data > 10){ q = 10; } for(; q; q /= 10){ printf("%c", '0' + (data/q)%10); } } int main(void){ int number; double x_number; int bit; printf("請輸入一個整數 : "); scanf("%d", &number); printf("請輸入小數,和小數位數 : "); scanf("%lf%d", &x_number, &bit); printfInt(number); printf("\n"); printfDouble(x_number, bit); printf("\n"); }
運行結果
3、算法分析
(1)、我用的是if...else if...else if來判斷這個數是幾位數,因為用這個數每次/=10也可以判斷是幾位數,但是效率比較低,用if判斷的方法最多10次,就可以知道是幾位數字。
(2)、其次,我知道了是幾位數,就可以讓(data/q)%10,data不變,讓q/=10,在循環中每次調用這個語句,就可以從最高位--->最低位順序取出,再加上'0',就轉換為一個一個的字符了,輸出即可。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。