c语言中乘号的作用,c:乘号

写在最前:这是我c语言暑假作业的最后一题了,我几乎是一天完成一题没有间断过,除了在火车上的特殊情况。这意味着我的暑假接近尾声了,期待我的大二新生活。

28、任意给一个9位整数;再在其中插入4个乘号,使分得的5个整数的乘积最大;

输入:正整数n;

输出:被分得的5个整数、得到的最大乘积值。

另:试编写一方法,任给一个自然数(不定长、以字符串的形式作为此方法的参数),编程确定在其中插入一个乘号(),使得被分割的两个自然数之积最大,要求输出其二者相乘的算式形式。(如7282144:7282144=5914368)

题目分析:

在9位数中插入4个乘号

我忍不住想起了我做的第19题

那题要求在一个6位数中随机插入2个加号

然后相加求最大值

我就把加号在不同位置的情况都写了一遍

那叫一个麻烦

今天这题很相似

不过更复杂

这么长的数字

我肯定是用字符串来处理了

可是想起上一次把数组转换为整型数字时的麻烦

我决定找方法简化

运气不错,

我学到了一个新的库函数

int atoi(const char *str)

开头要导入头文件 stdlib.h

这个函数可以把字符串转换为整型的数字

我用字符串输入的9位数

插入4个乘号后分割为5个数字

我只需要把字符串分割,

转换为整型数字然后相乘

找出数值最大的就可以了

至于第2题

输入任意长度的数字

用字符串储存

然后分割为两个部分

转换为整数再相乘

把所有的情况产生的值进行比较

找出最大值

我给题目标出重点:

分割示意图:

纸上谈兵结束,

第一题代码如下:

#include

#include

#include

//定义将数字字符转化为整型数字的函数,分割出来个位数时,用这个会方便许多

int fun(char c){

int a=c-'0';

return a;

}

//定义求乘积最大的函数

void max(char *s){

char a[10];//分割的时候可能会用到这个的字符串

int s1,s2,s3,s4,s5,i,j,k,t,m1,m2,m3,m4,m5,m=0;//s1~s5记录分割后的5个数字

//最后一个乘号不确定的状态

s1=fun(s[0]);//单个字符转数字

s2=fun(s[1]);

s3=fun(s[2]);

for(i=4;i<9;i++){

j=0;

for(k=3;k

a[j++]=s[k];//分割出第4个数字

a[j]='\0';//字符串最后一定要加上 '\0' 来表示结束,我一开始没有加导致计算出错

s4=atoi(a);

j=0;

for(k=i;k<9;k++)

a[j++]=s[k];//分割出第5个数字

a[j]='\0';

s5=atoi(a);

t=s1*s2*s3*s4*s5;

if(m

m=t;//用打擂台的方法确定最大值

m1=s1;m2=s2;m3=s3;m4=s4;m5=s5;

}

}

//倒数第2个乘号不确定的状态

s1=fun(s[0]);//单个字符转数字

s2=fun(s[1]);

s5=fun(s[8]);

for(i=3;i<8;i++){

j=0;

for(k=2;k

a[j++]=s[k];//分割出第3个数字

a[j]='\0';

s3=atoi(a);

j=0;

for(k=i;k<8;k++)

a[j++]=s[k];//分割出第4个数字

a[j]='\0';

s4=atoi(a);

t=s1*s2*s3*s4*s5;

if(m

m=t;//用打擂台的方法确定最大值

m1=s1;m2=s2;m3=s3;m4=s4;m5=s5;

}

}

//第2个乘号不确定的状态

s1=fun(s[0]);//单个字符转数字

s4=fun(s[7]);

s5=fun(s[8]);

for(i=2;i<7;i++){

j=0;

for(k=1;k

a[j++]=s[k];//分割出第2个数字

a[j]='\0';

s2=atoi(a);

j=0;

for(k=i;k<7;k++)

a[j++]=s[k];//分割出第3个数字

a[j]='\0';

s3=atoi(a);

t=s1*s2*s3*s4*s5;

if(m

m=t;//用打擂台的方法确定最大值

m1=s1;m2=s2;m3=s3;m4=s4;m5=s5;

}

}

//第2个乘号不确定的状态

s3=fun(s[6]);//单个字符转数字

s4=fun(s[7]);

s5=fun(s[8]);

for(i=1;i<6;i++){

j=0;

for(k=0;k

a[j++]=s[k];//分割出第1个数字

a[j]='\0';

s1=atoi(a);

j=0;

for(k=i;k<6;k++)

a[j++]=s[k];//分割出第2个数字

a[j]='\0';

s2=atoi(a);

t=s1*s2*s3*s4*s5;

if(m

m=t;//用打擂台的方法确定最大值

m1=s1;m2=s2;m3=s3;m4=s4;m5=s5;

}

}

//打印结果

printf("%d*%d*%d*%d*%d=%d\n",m1,m2,m3,m4,m5,m);

}

int main(){

//定义变量,输入数据

char s[80];

printf("输入一个9位整数:\n");

scanf("%s",s);

//调用函数计算结果

max(s);

return 0;

}

运行测试:

这么大的数字

运算结果是否准确我无法判断

不过我数字分割的结果貌似是对的

第二题代码如下:

#include

#include

#include

//定义求乘积最大的函数

void max(char *s){

char a[80];//a临时储存分割的字符串,字符串转整型时数字会用到

int m1,m2,m=0,s1,s2,i,j,k,t,len;//定义一些要用到的变量

len=strlen(s);//输入的长度是任意的,可以用这个函数确定

for(i=1;i

k=0;

for(j=0;j

a[k++]=s[j];

a[k]='\0';//最后一定要加 \0

s1=atoi(a);//字符串转数字

k=0;

for(j=i;j

a[k++]=s[j];

a[k]='\0';

s2=atoi(a);

t=s1*s2;

if(m

m=t;//打擂台法求最大值

m1=s1;

m2=s2;

}

}

//打印结果

printf("%d*%d=%d\n",m1,m2,m);

}

int main(){

//定义变量,输入数据

char s[80];

printf("输入一个整数:\n");

scanf("%s",s);

//调用函数计算结果

max(s);

return 0;

}

运行测试:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值