求2^n-char 数组表示超大整数
来源:互联网 发布:知乎日报和读读日报 编辑:程序博客网 时间:2024/06/06 02:26
如果用int数组存储,则1000*1000*4=4M,既超过20就超过4M了。所以将int存储变成char存储。
比如2的64次方=18446744073709551616,用数组存储为a[]={1,8,4,4,6,7,4,4,0,7,3,7,0,9,5,5,1,6,1,6}
比如:2*2*2*2*2=32.每一位看成一个bit
a[0]=1*2*2*2=8<9不进位. a[0]=8*2=16; 16>9=>a[1]=1,a[0]=6;(16)
a[1]*2=2,a[0]*2=12;12>9=>a[1]=2+1=3;a[0]=12-10=2; (32)
16*2=a[1]*2+a[0]*2;
最小化边界将999改成5即可。
a[i]=1; 这是整数的1=0x01;放到char中,按照%c提取,则是ascii字符1对应的字符;如果是按照整数提取是1.
char和int比较按照二进制存储比较.
#include <stdio.h>
void multiplyByTwo(char *a)
{
int i;
for (i=0; i<1000; i++)
a[i] *= 2;
for (i=0; i<1000; i++)
if (a[i]>9)
{
a[i] -= 10;
a[i+1]++;
}
}
int main(void)
{
char a[1000] = {'\0'};
int i;
int n;
printf("请输入n的值:");
scanf("%d",&n);
a[0] = 1;
for (i = 0; i<n; i++)
multiplyByTwo(a);
printf("2^%d = ",n);
for (i = 999; i>=0; i--)
if (a[i] != '\0') break;
for (; i>=0; i--)
putchar(a[i] + '0');
printf("\n");
return 0;
}
- 求2^n-char 数组表示超大整数
- 求整数N的二进制表示中1的个数
- 求1到n这n个整数的十进制表示中1出现的次数
- 两个超大整数相加之数组实现
- 求一个整数数组中第N大的数
- 给定一个整数N,求N!末尾有多少个0?N!的二进制表示中最低1的位置?
- 一个大小为N(0<N<1000)的整数数组, 求该数组的子数组(长度大于2)为等差数列的个数?
- 【100题】第三十 求从1到n这n个整数的十进制表示中1出现的次数
- 求从1到n这n个整数的十进制表示中1出现的次数
- 求从1到n这n个整数的十进制表示中1出现的次数
- 求从1到n这n个整数的十进制表示中1出现的次数
- 求从1到n这n个整数的十进制表示中1出现的次数
- 求从1到n这n个整数的十进制表示中1出现的次数
- 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数
- 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
- 每天学习一算法系列(28)(输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数)
- 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数
- 输入一个整数n,求从1 到n 这n 个整数的十进制表示中1 出现的次数
- HDU-1258 确定比赛名次 【模板题】
- Android 控件布局常用属性
- @media screen针对不同移动设备-响应式设计
- 服务器和客户端 tcp通信
- java的基本数据类型有哪些java的八大基本数据类型
- 求2^n-char 数组表示超大整数
- OC(一)类、对象、属性、成员变量、方法(整理)
- iOS开发从入门到精通--导航控制器基础
- 让DIV内部内容撑开外层的div方法
- 【Life】 你为什么会离开游戏行业?
- poj 2406 Power Strings kmp next数组
- liunx安装httpd服务
- 只使用I/O的输入单数字的函数,实现任意实数的输出
- 字符串转十六进制字符函数