
北大ACM中的1001浮点数题咋做啊
使用JAVA的BigDecimal就可以:import java.util.*;class Main{ static{ for(Scanner i=new Scanner(System.in);i.hasNext();) System.out.println(i.nextBigDecimal().pow(i.nextInt()) .toPlainString().replaceAll(^0|\\\\\\\\.?0*$,)); }}用GCC的话可以这样写:float v;u;main(n){for(;~scanf(%f%d,&v,&n);puts()){int*r,p[999]={1},*q,t=p+n*4;for(;n--;)for(q=r=p;q<&n-2;r+=!*r&r北大ACM的题,不懂怎么改
#includeusing namespace std;#includeint TransHaab(char *NofM){if(strcmp(NofM,pop)==0)return 1;if(strcmp(NofM,no)==0)return 2;if(strcmp(NofM,zip)==0) \\\/\\\/ zip 中间多了个空格return 3;if(strcmp(NofM,zotz)==0)return 4;if(strcmp(NofM,tzec)==0)return 5;if(strcmp(NofM,xul)==0)return 6;if(strcmp(NofM,yoxkin)==0)return 7;if(strcmp(NofM,mol)==0)return 8;if(strcmp(NofM,chen)==0)return 9;if(strcmp(NofM,yax)==0)return 10;if(strcmp(NofM,zac)==0)return 11;if(strcmp(NofM,ceh)==0)return 12;if(strcmp(NofM,mac)==0)return 13;if(strcmp(NofM,kankin)==0)return 14;if(strcmp(NofM,muan)==0)return 15;if(strcmp(NofM,pax)==0)return 16;if(strcmp(NofM,koyab)==0)return 17;if(strcmp(NofM,cumhu)==0)return 18;if(strcmp(NofM,uayet)==0)return 19;}void TransTzd(int NofD){switch(NofD){case 1:cout<>m;for(int i=0;i>DNum>>temp>>NofM>>Hyears;dcount[i]=daycount(DNum,NofM,Hyears);}cout<药剂可选用有
北大acm第2339题怎么做
我的AC代码:#includeint r, c;char map[100][100];int check(int i, int j, char s){ if((i - 1 >= 0 && map[i - 1][j] == s) || (i + 1 < r && map[i + 1][j] == s) || (j - 1 >= 0 && map[i][j - 1] == s) || (j + 1 < c && map[i][j + 1] == s)) return 1; else return 0;}int main(){ int i, j, k, n, t, f = 0; char temp[100][100]; scanf(%d, &t); while(t--) { scanf(%d%d%d , &r, &c, &n); if(f++) printf(\\\ ); for(i = 0; i < r; ++i) { for(j = 0; j < c; ++j) scanf(%c, &map[i][j]); getchar(); } for(k = 0; k < n; ++k) { for(i = 0; i < r; ++i) { for(j = 0; j < c; ++j) { switch(map[i][j]) { case 'R': if(check(i, j, 'P')) temp[i][j] = 'P'; else temp[i][j] = 'R'; break; case 'S': if(check(i, j, 'R')) temp[i][j] = 'R'; else temp[i][j] = 'S'; break; case 'P': if(check(i, j, 'S')) temp[i][j] = 'S'; else temp[i][j] = 'P'; break; } } } for(i = 0; i < r; ++i) { for(j = 0; j < c; ++j) { map[i][j] = temp[i][j]; } } } for(i = 0; i < r; ++i) { for(j = 0; j < c; ++j) { printf(%c, map[i][j]); } printf(\\\ ); } } return 0;}
求北大ACM 1001题高精度幂的【思路】
这个其实可以转化成大整数的乘法的,先把小数点往后面移,然后可以大整数乘法,最后把大整数除以刚才移掉的,也就是把小数占往左边移几位,这样的话大整数乘法做起来简单一些的.
北京大学ACM1016题怎么做
我的思路和你几乎是一样的,就是简化了些,你可以看下。
AC代码如下:#include #include #include using namespace std;int main(){int a[26],b[26];int lena,lenb,i;int flag;string sa,sb;while(cin>>sa>>sb){for(i=0;i<26;i++)a[i]=b[i]=0;lena=sa.length();lenb=sb.length();if(lena!=lenb){printf(NO\\\ );continue;}flag=1;for(i=0;i北大ACM第1519道题
急
求解
DP思路: 如果是奇数ans[i]=ans[i-1] 如果是偶数,可分成前面由两个1 和 全部变成偶数的两块 ,ans[i]=ans[i-2]+ans[i\\\/2]; 综合可得出ans[i]=ans[i-2]+ans[i\\\/2] #include #include #define M 1000002 int ans[M]; int n; void init(); int main() { init(); while(scanf(%d,&n)==1) printf(%d\\\ ,ans[n]); return 0; } void init() { int i; memset(ans,0,sizeof(ans)); ans[1]=1; ans[2]=2; for(i=3;i<=1000000;i++) { ans[i]=ans[i-2]+ans[i\\\/2]; if(ans[i]>=1000000000) ans[i]%=1000000000; } } 用dp的思路求出递推公式,在大于1000000000时只要尾数,所以不需要高精度计算。
在discuss里都有提示的,以后有问题可以先看discuss