c语言中大数之间的相乘相除。因为数比较大,故而用数组存储
数组存储 从低到高 依次表示 个位、十位、百位、千位。。。。。。 当大数与另一数相乘时模拟乘法的运算规则
int temp = 0; // temp暂存与上一位相乘得到的进位的信息
for(int j=0; j<100; j++) {
int m = a[j]*4+temp; // m 表示当前相乘位加上上一位进位所得到的数值
a[j]=m%10; // 所以当前位的值需检查是否进位
temp = m/10;
}
相除 同样模拟除法的运算过程
int temp=0; // temp 表示上一位数被除后余下的数
for(i; i>=0; i--) {
int m = a[i] + temp*10; // 余下的数乘10 加上下一位数 构成下一个被除数
a[i]=m/3; // 当前位 除 3
temp = m%3; //
}
NYOJ 45_棋盘覆盖问题
求出总的个数 然后除3 可以得到需要的图二的个数
因为数字比较大,故需要大数运算
#include<cstdio>
#include<cstring>
using namespace std;
int main() {
int t;
scanf("%d",&t);
while(t--) {
int a[101]= {0};
a[0]=1;
int n;
scanf("%d",&n);
int temp;
for(int i = 1; i<=n; i++) {
temp = 0;
for(int j=0; j<100; j++) {
int m = a[j]*4+temp;
a[j]=m%10;
temp = m/10;
}
}
int i;
for(i=100; i>=0; i--) {
if(a[i]!=0) {
break;
}
}
temp=0;
for(i; i>=0; i--) {
int m = a[i] + temp*10;
a[i]=m/3;
temp = m%3;
}
for(i=100; i>=0; i--) {
if(a[i]!=0)
break;
}
for(i; i>=0; i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}