背景:一次ac!!而且调试时间也短!!!!看来这个自定义函数,确实是一个好的方法!!构思又清晰,调试又明朗!
思路:一些单一的函数堆砌而成,每个函数有自己的功能。
学习:1.我是采用模拟手算二进制为十进制的方法,而小紫书上给出的方法似乎更简单:(这似乎透露除了字符串数转化普通数的方法)(普通二进制数,转化为十进制数就一位一位的拆分)
//assumpt that temp[] have n charnumbers int decimal=0; for(int i = 0;i < n;i++){ decimal=decimal*2 +temp[i]-'0'; }
#include<stdio.h> #include<math.h> char list[248],temp[8],answer[10000]; char scan(void){ int count=0; char a; while((a = getchar()) != EOF && a != '\n'){ list[count++] = a; } return a; } void print(int x,int n){ int y; if(n == 1) y=0; else if(n == 2) y=1+x; else if(n == 3) y=4+x; else if(n == 4) y=11+x; else if(n == 5) y=26+x; else if(n == 6) y=57+x; else if(n == 7) y=120+x; printf("%c",list[y]); } void get(int length){ char a; int count=0; for(int i = 0;i < length;i++){ if((a = getchar()) == '\n'){ i--; }else{ temp[count++] = a; } } } int calculate(int n){ int ans=0; for(int i = n-1,k = 0;i >= 0;i--,k++){ ans+=(temp[i]-'0')*(int)pow(2.0,(double)k); } return ans; } bool make(void){ get(3); if(temp[0] == '0' && temp[1] == '0' && temp[2] == '0'){ printf("\n"); return true; } int n=calculate(3); while(1){ get(n); bool over = false; for(int i = 0;i < n;i++) if(temp[i] != '1') over =true; if(!over){//this segment break; } int a = calculate(n); print(a,n); } return false; } int main(void){ while(scan()!=EOF){ while(1) if(make()) break; getchar(); } return 0; }
时间: 2024-11-05 02:29:15