NYOJ 棋盘覆盖
Posted fzuhyj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NYOJ 棋盘覆盖相关的知识,希望对你有一定的参考价值。
数字很大,要用大数乘法。
#include<iostream> #include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; char s1[1000]; char s2[10]; char* bignum(char *num1, char *num2) { if(strcmp(num1,"0")==0) return "0"; int length1 = strlen(num1); int length2 = strlen(num2); int i, l; char *res = (char *)malloc(sizeof(char)*(length1 + length2)); //开辟相应内存 memset(res, 0, sizeof(char)*(length1 + length2)); for (i = length1 - 1; i >= 0; i--) for (l = length2 - 1; l >= 0; l--) { res[i + l + 1] += (num1[i] - ‘0‘)*(num2[l] - ‘0‘); res[i + l] += res[i + l + 1] / 10; //马上进行进位 res[i + l + 1] %= 10; } int count = 0; while (res[count] == 0) //由于保存的结果是从右向左的,所以要消除左部分的0; { count++; } char* ret = (char *)malloc(sizeof(char)*(length1 + length2 + 2)); memset(ret, 0, sizeof(char)*(length1 + length2 + 2)); for (l = 0, i = count; i < length1 + length2; l++, i++) //非0部分赋给ret { ret[l] = res[i] + ‘0‘; } //printf("Ret=%s ", ret); return ret; free(res); free(ret); } int main() { int t; cin>>t; while(t--) { int k; cin>>k; strcpy(s1,"0"); strcpy(s2,"4"); //printf("%s ",s1); while(k--) { //printf("%s ",s1); strcpy(s1,bignum(s1,s2)); for(int i=strlen(s1)-1;i>=0;i--) { if(s1[i] == ‘9‘) { s1[i] = 0; continue; } else { s1[i] = s1[i] + 1; break; } } } printf("%s ",s1); } return 0; }
以上是关于NYOJ 棋盘覆盖的主要内容,如果未能解决你的问题,请参考以下文章