Codeforces Round #450 (Div. 2)+劉汝佳紫書3-8 (C語言整數模擬除法)
阿新 • • 發佈:2019-02-02
基本模板:
#include <iostream> #include <cstdio> using namespace std; int main() { int a,b; int tem; while(~scanf("%d%d",&a,&b)){ for(int i=0;i<15;i++){ tem=a/b; a-=b*tem; a*=10; printf("%d",tem); if(!i) printf("."); } printf("\n"); } }
#include <iostream> #include <cstdio> #include <cstdlib> #include <queue> #include <cstring> #include <algorithm> #include <cmath> #define LL long long using namespace std; int main() { int a,b,c; int tem,cnt,flag; while(~scanf("%d%d%d",&a,&b,&c)){ cnt=flag=0; a*=10; for(int i=0;i<1000005;i++){ if(a==0){ if(c==0){ flag=1; cnt++; } break; } tem=a/b; a-=b*tem; cnt++; a*=10; //printf("%d",tem); if(tem==c){ flag=1; break; } } if(flag) printf("%d\n",cnt); else printf("-1\n"); } }
題目連結:vj上 UVa 202 自行開 即可
程式碼如下:
//即使是迴圈小數,但可能並不是從第一位小數開始迴圈,這樣在加括號和迴圈節的長度上都會出錯,WA了數次 #include <iostream> #include<cstdio> #include<cstring> using namespace std; int rm[1010];//最後的結果陣列 int vis[1000010];//標記是否出現過,儲存的是第一次出現的位置k int rec[1000010];//第k次出現時,被除數a的值 int main() { int a,b; while(~scanf("%d%d",&a,&b)) { memset(vis,0,sizeof(vis)); memset(rec,0,sizeof(rec)); printf("%d/%d = %d",a,b,a/b); a=a%b; int k=1; while(!vis[a]&&a)//如果訪問過了,說明是迴圈小數,否則存在不迴圈的解 { vis[a]=k; rec[k]=a; a=a*10; rm[k++]=a/b; a=a%b; } printf("."); for(int i=1;i<k&&i<=50;++i) { if(a&&a==rec[i])//當從這個數開始迴圈的時候再加括號,只擴出迴圈部分 printf("("); printf("%d",rm[i]); } if(!a) printf("(0"); if(k>50) printf("..."); printf(")\n"); printf(" %d = number of digits in repeating cycle\n",a?(k-vis[a]):1);//k減去迴圈起始位置 } return 0; }