演算法的樂趣c/c++ —— 1.1.2入門習題
阿新 • • 發佈:2018-12-26
宣告:摘選自“ 演算法競賽入門經典(第2版)”作者: 劉汝佳 / 陳鋒 ISBN:9787302291077
1,子序列的和(亞)
輸入兩個正整數n <m <106,輸出,保留5位小數。輸入包含多組資料,結束標記為n = m = 0.提示:本題有陷阱。樣例輸入:
2 4
65536 655360
0 0
案例輸出:
案例1:0.42361
案例2:0.00001
#include<stdio.h> int main() { int n, m; double sum; scanf("%d%d", &n, &m); for(int i=0; (i+n)<=m; i++) { sum += (double)1/((i+n)*(i+n)); } printf("%.5f", sum); return 0; }
2,分數化小數(小數)
輸入正整數a,b,c,輸出a / b的小數形式,精確到小數點後c位.a,b≤106,c≤100。輸入包含多組資料,結束標記為a = b = c = 0 。
樣例輸入:
1 6 4
0 0 0
樣例輸出:
案例1:0.1667
#include<stdio.h> int main() { int a, b, c, Case=1; while(3 == scanf("%d%d%d", &a,&b,&c)) { if(a==0 && b==0 && c==0) break; //只要輸入三個數同時為0即停止運算 int numb = a/b; //取整數部分 a %= b; //取餘數 printf("Case %d %d.", Case++, numb); //先列印整數部分加上一個小數點例如 1. 或者2. for(int i=1; i<c; i++) { a *= 10; //取小數點後第i位 printf("%d", a/b); //將小數點後第i位列印 a %= b; //取餘數 } a *= 10; printf("%d\n", (a%b*10/b>5)?(a/b+1):(a/b)); //如果最後一位大於5,進位,否則不變 } }