2009-01-23 18:16:35來源不明
96高市資訊學科能力競賽 設計一含小數點的十進位轉二進位的程式
本題重點:
不採用double的輸入,準確值的問題,所以看起來有點長。
整數部分的轉換應該不用說吧@@?
原本為?/2+?/(2^2)+?/(2^3).... 每乘1個2
?就會跳出來 也就是我的答案
/************************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- main()
- {
- char x[10];
- while(gets(x))
- {
- int a,b,temp=0,temppoint=0;
- for(a=0;a<strlen(x);a++)
- {
- if(x[a]=='.')
- break;
- temp=temp*10+x[a]-48;
- }
- for(b=a+1;b<strlen(x);b++)
- {
- temppoint=temppoint*10+x[b]-48;
- }
- int n=a,n1=b-a-1;/*n為整數部分的位數 n1為小數點部分的位數*/
- int y[50];
- /*以下為整數部分的處理*/
- a=0;
- if(temp!=0)
- {
- while(temp!=1)
- {
- y[a]=temp%2;
- temp=temp/2;
- a++;
- }
- printf("1");
- for(b=a-1;b>=0;b--)
- {
- printf("%d",y[b]);
- }
- printf(".");
- }
- else
- printf("0.");
- /*以下為小數點的處理*/
- int m=1;
- for(a=0;a<n1;a++)
- {
- m=m*10;
- }
- /*重點:原本為?/2+?/(2^2)+?/(2^3).... 每乘1個2 ?就會跳出來 也就是我的答案*/
- /*本方法由學長傳授*/
- while(1)
- {
- temppoint=temppoint*2;
- printf("%d",temppoint/m);
- temppoint=temppoint%m;
- if(temppoint==0) break;
- }
- printf("\n");
- }
- return 0;
- }