用c语言怎么写? 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 c语言 .从键盘输入10个整数,存到一维数组中,并求这10个...
C\u8bed\u8a00\u95ee\u9898 \u6c42\u52a9\u4ee3\u7801\uff1a
#include
void main(){ double a=10,b=1,sum[2]={0,0}; int i;
for (i=0;i<30;i++) { sum[0]+=a; sum[1]+=b; b*=2; } printf("\u964c\u751f\u4eba\u5171\u7ed9\u4e86\u5bcc\u7fc1%.0f\u4e07\u5143\n",sum[0]); printf("\u5bcc\u7fc1\u5171\u7ed9\u4e86\u964c\u751f\u4eba%.6f\u4e07\u5143\n",sum[1]/1000000.0);}
\u7ed3\u679c\uff1a
1\u3001\u9996\u5148\u6253\u5f00c\u8bed\u8a00\u7f16\u8f91\u5668\uff0c\u65b0\u5efa\u4e00\u4e2aC\u8bed\u8a00\u7684\u6587\u4ef6\uff0c\u6587\u4ef6\u4e2d\u5f15\u5165C\u8bed\u8a00\u7684\u5934\u6587\u4ef6\uff0c\u65b0\u5efa\u4e00\u4e2amain\u51fd\u6570\uff0c\u51fd\u6570\u4e2d\u8bbe\u7f6e\u4e00\u4e2a10\u4e2a\u5143\u7d20\u7684\u6570\u7ec4\u4ee5\u53ca\u4e00\u4e2a\u7528\u6765\u6c42\u548c\u7684\u53d8\u91cf\uff1a
2\u3001\u4e4b\u540e\u7528\u4e00\u4e2afor\u5faa\u73af\u904d\u5386\u6570\u7ec4\uff0c\u6bcf\u6b21\u90fd\u4ecescanf\u4e2d\u53d6\u5230\u7528\u6237\u8f93\u5165\u7684\u6570\u5e76\u5b58\u5165\u6570\u7ec4\u4e2d\uff0c\u5b58\u5b8c\u540e\u518d\u7528sum\u52a0\u8fd9\u4e2a\u6570\uff0c\u5982\u6b64\u4fbf\u80fd\u6c42\u51fa\u6570\u7ec4\u5185\u5143\u7d20\u7684\u548c\u4e86\uff1a
3\u3001\u6700\u540e\u8fd0\u884c\u7a0b\u5e8f\uff0c\u8f93\u516510\u4e2a\u6570\u5373\u53ef\u770b\u5230\u7ed3\u679c\u3002\u4ee5\u4e0a\u5c31\u662f\u7528c\u8bed\u8a00\u4ece\u952e\u76d8\u8f93\u516510\u4e2a\u6570\u5b58\u5165\u6570\u7ec4\u5e76\u6c42\u548c\u7684\u65b9\u6cd5\uff1a
这题就是让你用一个数组表示一个数字,比如int n[3]={12,13,14}就是表示121314这个6位整数,并使用这个数组表示的整数模拟整数+1的运算。
思路就是从数组最后一个元素的整数开始做+1运算,最高进位,则进位到数组前一个元素整数中,以此类推,如数组第一个元素的数字最高位也进位,则表示溢出,超出该数组表示的范围。
由于题目没有限制数组大小及每一个元素所能表示的位数,我这里代码数组大小及元素数字最大位数用常量M和L表示,可修改(默认数组大小5个元素,每个元素表示2位数字,也就是数组最大表示10位整数)。
由于数字均为随机数,位数低于元素最大位数时,输出打印需补0.
所有功能均独立函数,详细见备注。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 5//数组大小
#define L 2//数组每个元素的数字最大位数
void init(int num[M]);//初始化数组
void printNum(int num[M]);//打印数组内容
int addAndCheckOverFlow(int *n,int y);//当前数字+1并检查最高位是否溢出,溢出返回1,不溢出返回0
int add_1(int num[M]);//从数组最后一个元素数字开始+1,如有溢出,则进位加至前一个数组元素的数字,如此循环。如数组第一个元素溢出则返回1表示超出数组表示范围。否则返回0
int main()
{
int num[M]={0},y;
srand(time(NULL));
init(num);
printf("随机生成的数组内容为:
");
printNum(num);
y=add_1(num);
if(y)
printf("加一后,最高位溢出,数组内容为:
"),printNum(num);
else
printf("加一后,数组内容为:
"),printNum(num);
return 0;
}
void init(int num[M])
{
int i,n=1;
for(i=0;i<L;n=n*10,i++);
for(i=0;i<M;i++)
num[i]=rand()%n;//用随机2位数填充数组
}
void printNum(int num[M])
{
int i,j,n,m;
char nStr[L+1]={0};
for(i=0;i<M;printf("%s ",nStr),i++)
for(j=L-1,n=num[i];j>=0;j--){//将每个元素数字从最低位开始读,位数低于L,该位补0,补位后的数字字符组成字符串打印输出
m=n%10;
if(m) nStr[j]=48+m;
else nStr[j]='0';
n=n/10;
}
printf("
");
}
int add_1(int num[M])
{
int i,y=1;//y即表示进位,也作为初始的加数
for(i=M-1;i>=0;i--){
y=addAndCheckOverFlow(&num[i],y);
if(!y) break;
}
return y;
}
int addAndCheckOverFlow(int *n,int y)//当前元素数字+1并检查最高位是否溢出,溢出返回1,不溢出返回0
{
int i,t=1,num=*n,len1=1,len2=1;
while((num=num/10))len1++;//加1前的位数
num=*n,num=num+y;
*n=num;
while((num=num/10))len2++;//加1后的位数
if(len2>len1)
{
for(i=1;i<len2;t=t*10,i++);
*n-=t;
return 1;
}
return 0;
}
扩展阅读:扫一扫题目出答案 ... c语言符号意义大全 ... c#语言翻译器 ... 写c语言的软件 ... c语言必背100代码 ... c语言40个常用符号 ... c语言基础知识入门 ... 大一c语言必背知识点 ... c语言给定一个表达式求值 ...