乘除法的简便运算ppt同在中间有个加号怎么算

日期:起。个位相乘满几个十就向前一位进几。
二、 导入新课,揭示课题
1、师:请同学们观察情景图,5个鱼缸里有几条金鱼?用数和算式怎样表示?
生自主写算式。
2、交流写的算式,学生中可能出现的算法有0+0+0+0+0=0
或乘法算式:0& 5=0 5&0=0
如果学生没有写出乘法算式,师生可以共同讨论:5个0相加用乘法算式应该怎样表示?得出乘法算式。
3 两种方法得出的结果都是相同的,从而让学生明白:0和任何数相乘都得0。(包括0&0=0)
4、 让学生举一些其中一个乘数是0的乘法算式。加深对0的认识。
三、 ...<b style="color:#aa相加用乘法算式应该怎样表示的相关内容日期:上海市教委表示:0-3岁婴幼儿的早期大脑开发至关重要 如今年轻的爸爸妈妈不会再为0D3岁的宝贝囡囡如何变聪明而头痛。日前,记者从上海市教委有关部门获悉,“加强0D3岁儿童早期发展”已被确立为重要课题。到时,爸爸妈妈可在双休节假日抱着出生不久的婴儿参加社区育婴讲日期:发烧就表示生病了吗 手摸量体温的误差很大,时常会误判。怀疑宝宝发烧时,首先要确定测量宝宝的体温是否准确?人类的体温是依赖大脑内的体温调节中枢来控制的,婴幼儿由于此调节中枢尚未稳定成熟,所以体温高低相差较大,而且常会受到环境温度的影响。 正常人的体温并非恒定日期:小学教辅铺天盖地 市教委表示幼儿教育不该学科化 打着“二期课改”、“名师”旗号推出的各类小学教辅全都未曾“正名”。针对市面上教辅材料日益升温,且呈现低龄化趋势的现象,市教委昨明确表态,从未委托任何...日期:幼儿园“进驻”居民楼居民表示不胜烦扰 近日,合肥市高新区兴园小区石先生向本报反映:他家楼上有人开了一家幼儿园,楼上楼下的居民对此不胜烦扰。他提出质疑:居民楼内开办幼儿园合法吗?据石先生介绍,他家住兴园小区67栋一楼,今年年初,二楼开办了一家私人幼儿园。 幼儿日期:宝宝发烧就表示生病了吗 手摸量体温的误差很大,时常会误判。怀疑宝宝发烧时,首先要确定测量宝宝的体温是否准确?人类的体温是依赖大脑内的体温调节中枢来控制的,婴幼儿由于此调节中枢尚未稳定成熟,所以体温高...日期:教育部长周济表示:评价学生将不再只看考分 教育部部长周济在日前召开的全国人大常委会会议上,作关于普及义务教育和实施素质教育的工作报告时表示,要努力探索和建立符合素质教育要求的招生...日期:发烧就表示生病了吗 手摸量体温的误差很大,时常会误判。怀疑宝宝发烧时,首先要确定测量宝宝的体温是否准确?人类的体温是依赖大脑内的体温调节中枢来控制的,婴幼儿由于此调节中枢尚未稳定成熟,...
&最新内容- - - - - - - - - - - - &&热点推荐
精品专题-  -  - -  -  - -  -  - -  -  - -  -  - -  -  - -  -  - -  -  - -  -  -
英语学习- -  -  - -  -  - -  -  - - -  -  - -  -  - -  -  - - -  -  -
数学学习-  - - -
 - - - - - - - -有人编了一个程序:从1开始,交错地做加法或乘法(第一次可以是加法,也可以是乘法)每次加法,将上次的运算结果加2或加3;每次乘法,将上次的运算结果乘2或乘3.例如,30可以这样得到:.(1)证明:可以得到22;(2)证明:可以得到2100+297-2.查看本题解析需要普通用户:1个优点。用户与用户即可查看。9 7 5 4中间怎么样添加,加减乘除等于24
9 7 5 4中间怎么样添加,加减乘除等于24
10-01-07 &匿名提问 发布
拜托楼上的是怎么算的那个式子也说得2?不加括号的我不知道用括号的话:(5+5)/5*5/5 &#160; &#160; &#160; &#160; &#160;(5*5/5+5)/5
请登录后再发表评论!
(4*7)-(9-5)=24
请登录后再发表评论!
4*7-(9-5)=24
请登录后再发表评论!1605人阅读
& 限于数据类型的长度有限,对于大数据的计算就无能为力了,这里主要是采用字符数组解决精度问题。
& 加法、减法的思路差不多,主要就是采用我们固有的思维来计算,直接一位一位地相加。减法的话,先
判断2个数的大小,让较大的数始终在前面,并且改变相应的数据长度,把结果放在一个临时的缓冲区里面。
计算完毕后,再把数据写入到用户的缓冲区中,并且除去前面多余的0。乘法的计算就有点不同了,最大的
不同之处就是在于我们自己算乘法的时候还要算加法,这里我把加法合到了算乘法的过程中,也免除了溢出的
危险,计算量也小些了,每一位乘之前取结果当前位的&#20540;保存起来,然后连带进位一起加起来,就避免了最后
算加法的问题。
& 算阶乘的时候,主要就是确定该给临时缓冲区分配多大内存。最后大概算了下,一位数分配1*1个,两位数就分配2*1个,
三位数就分配3*1。专门写了个函数用于返回分配数量大小。分配3个这么大的缓冲区,一个存取当前每一次的计算结果(逆序表示),
第二个复制该结果(逆序表示),第三个存取待乘的数据(顺序表示)。还是乘法结束后,加法也完毕了,然后进入下一次乘法。
怎么想的就是怎么做的。用gcc编译的时候,注意带上-lm选项,链接math库,下边是一个带简单错误处理的demo以及源代码。
#include &stdio.h&
#include &string.h&
#include &stdlib.h&
#include &math.h&
#include &assert.h&
int ystrlen( const char* str )
assert( str != NULL );
while( (*str--) !='\0' )
int get_allocate_num(const int* num1, const int* num2)
return (*num1 &= *num2) ? *num1+1 : *num2+1;
void big_add(const char *num1, const char *num2, char *res)
//res存储计算后的结果
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, j, k,
char flag = 0;//进位标志
char *temp_res,//临时存取结果
num = get_allocate_num(&len1, &len2);
temp_res = (char *)malloc(num);
i = len1 - 1;
j = len2 - 1;
for (k = num - 1; k &= 0; k--) {
if (i &= 0 && j &= 0) {//加号两边都有数
temp = num1[i--] + num2[j--] +
if (temp & 0x69) {//有进位
temp_res[k] = temp - 0x3a;
flag = 0x01;
temp_res[k] = temp - 0x30;
flag = 0x0;
} else if (i &= 0 && j & 0) {//加号右边结束
temp = num1[i--] +
if (temp & 0x39) {//有进位
temp_res[k] = 0x30;
flag = 0x01;
temp_res[k] =
flag = 0x0;
} else if (i & 0 && j &= 0) {//加号左边结束
temp = num2[j--] +
if (temp & 0x39) {//有进位
temp_res[k] = 0x30;
flag = 0x01;
temp_res[k] =
flag = 0x0;
} else {//加号左边 右边刚结束
if (temp) {//有无进位计算此次就结束
temp_res[0] = 0x31;
strncpy(res, temp_res, num);
res[num] = '\0';
} else {//此时既无进位
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
free(temp_res);
int big_cmp(const char *num1, const int *len1, const char *num2, const int *len2)
if (*len1 & *len2) {//减数大
} else if (*len1 & *len2) {//被减数大
return -1;
for (i = 0; i & *len1; i++) {
if (num1[i] & num2[i]) {
} else if (num1[i] & num2[i]) {
return -1;
return 0;//2个数相等
void earse_zero(char *res, const int *num)
{//擦除多余的0
int i = 0;
if (res[0] == '-') {
while (res[i] == 0x30) {
if (i != 1) {
len = *num - i + 1;
temp = (char *)malloc(len);
strncpy(temp, &res[i], len);
strncpy(&res[1], temp, len);
free(temp);
while (res[i] == 0x30) {
if (i != 0) {
len = *num -
temp = (char *)malloc(len);
strncpy(temp, &res[i], len);
strncpy(res, temp, len);
free(temp);
void big_sub(const char *num1, const char *num2, char *res)
//res存储计算后的结果
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, j, k,
char flag = 0, flag_negetive = 0;//进位标志
char *temp_res,//临时存取结果
i = len1 - 1;
j = len2 - 1;
k = big_cmp(num1, &len1, num2, &len2);
if (k == 0) {
res[0] = 0x30;
res[1] = '\0';
num = get_allocate_num(&len1, &len2);
temp_res = (char *)malloc(num);
if (k == -1) {//始终让num1指向较大数,同时也改变数据的长度
k = (int)num1;
num1 = num2;
num2 = (const char *)k;
flag_negetive = 1;
for (k = num - 1; k & 0; k--) {
if (j &= 0) {
if (k == 1 && i == 0 && j == 0) {//位数相同
temp_res[1] = num1[0] - num2[0] - flag + 0x30;
if (flag_negetive == 1) {//结果为负数
strncpy(&res[1], &temp_res[1], num-1);
res[0] = '-';
res[num] = '\0';
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
temp = num1[i--] - num2[j--] -
if (temp & 0x0) {//有借位
temp_res[k] = temp + 0x3a;
flag = 0x01;
temp_res[k] = temp + 0x30;
flag = 0x0;
temp = num1[i--] -
if (k == 1) {//最后一位
if (temp & 0x30) {
temp_res[1] =
if (flag_negetive == 1) {//结果为负数
temp_res[0] = '-';//添加负号
strncpy(res, temp_res, num);
res[num] = '\0';
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
} else {//有借位
if (flag_negetive == 1) {//结果是负数
temp_res[1] = '-';
strncpy(res, &temp_res[1], num-1);
res[num-1] = '\0';
strncpy(res, &temp_res[2], num-2);
res[num-2] = '\0';
if (temp &= 0x30) {
temp_res[k] =
flag = 0x0;
} else {//有借位
temp_res[k] = temp + 0
flag = 0x01;
free(temp_res);
earse_zero(res, &num);
void big_mul(const char *num1, const char *num2, char *res)
int len1 = strlen(num1);//num1为乘数
int len2 = strlen(num2);
char *temp_res, temp, temp_mul, last_
char flag = 0x0;
if (num1[0] == 0x30 || num2[0] == 0x30) {
res[0] = 0x30;
res[1] = '\0';
k = len1 + len2;
temp_res = (char *)malloc(k);
memset(temp_res, 0, k);
for (i = len2 - 1; i &= 0; i--) {
k = len1 +
for (j = len1 - 1; j &= 0; j--) {
//尽可能减少循环 每次的结果都是加了上次的结果 避免再把结果加起来
if (i == len2 - 1 || temp_res[k] == 0x0) {
//第一次乘的时候或者当前位置是0
last_res = 0x0;
//取得上一次当前位置的值
last_res = temp_res[k] - 0x30;
temp_mul = (num2[i] - 0x30) * (num1[j] - 0x30) + flag + last_//保存每一位的乘积
temp = temp_mul / 10;
if (temp & 0) {
flag = 0x0;
temp_res[k--] = (temp_mul % 10) + 0x30;
if (temp & 0 || temp_res[0] == 0x0) {
//每一次循环结束检查最高位以及那些结果不为k位数的
temp_res[k] = flag + 0x30;
flag = 0x0;//重置
k = len1 + len2;
strncpy(res, temp_res, k);
res[k] = '\0';
k++;//包含'\0'的长度
earse_zero(res, &k);
free(temp_res);
//*num待计算阶乘的数的大小,*len该数的长度
int get_fac_allocate_num(const char *num, const int *len)
int i, allocate_num = 0;
int data = atoi(num);
for (i = 1; i & * i++) {
allocate_num += i*9*pow(10, i-1);
allocate_num += *len*(data-pow(10, i-1)+1);//加上剩下的
return allocate_
void big_fac(const char *num, char *res)
int len = strlen(num),
int len1, len2;
int i, j, k, m,
char *temp_res, temp, temp_mul, last_
char flag = 0x0;
data = atoi(num);
if (data & 2) {
m = get_fac_allocate_num(num, &len);
temp_res = (char *)malloc(m*3);//前m个字节保存计算结果,后2块保存数据
memset(temp_res, 0, m*3);
strncpy(temp_res+m-len, num, len);
for (l = data - 1; l &= 2; l--) {
//乘法执行*num-2次
memcpy(temp_res+m, temp_res, m);//之前用strncpy居然没拷贝进去,发现strncpy碰到0就不拷贝了,那要参数n干啥
sprintf(&temp_res[2*m], &%d&, l);
len1 = ystrlen(&temp_res[2*m-1]);//数据是倒着存储的,得倒着算长度
len2 = strlen(&temp_res[2*m]);
for (i = len2 - 1; i &= 0; i--) {
//k = len1 +
k = m - len2 +//定位到最后面那个数
for (j = 1; j &= len1; j++) {
//尽可能减少循环 每次的结果都是加了上次的结果 避免再把结果加起来
if (i == len2 - 1 || temp_res[k] == 0x0) {
//第一次乘的时候或者当前位置是0
last_res = 0x0;
//取得上一次当前位置的值
last_res = temp_res[k] - 0x30;
temp_mul = (temp_res[2*m+i] - 0x30) * (temp_res[2*m-j] - 0x30) + flag + last_//保存每一位的乘积
temp = temp_mul / 10;
if (temp & 0) {
flag = 0x0;
temp_res[k--] = (temp_mul % 10) + 0x30;
if (temp & 0) {
//每一次循环结束检查最高位以及那些结果不为k位数的
temp_res[k] = flag + 0x30;
flag = 0x0;//重置
if (temp & 0) {
strncpy(res, &temp_res[k], m - k);
res[m - k] = '\0';
strncpy(res, &temp_res[k+1], m - k - 1);
res[m-k-1] = '\0';
free(temp_res);
sprintf(res, &%d&, data);
if (res[0] == 0x30) {
res[0] = 0x31;
void show_choice()
printf(&**************大数计算问题****************\n&);
printf(&*请选择操作类型
printf(&*1.加法
2.减法*\n&);
printf(&*3.乘法
4.阶乘*\n&);
printf(&******************5.退出******************\n&);
printf(&******************************************\n&);
void show_input(const char *choice)
char a[500], b[500], c[1000000];
switch (*choice) {
printf(&请输入加数(输入不是数字,后果自负): &);
scanf(&%s&, a);
printf(&请输入被加数(输入不是数字,后果自负): &);
scanf(&%s&, b);
if (a[0] &= 0x30 && a[0] &= 0x39 || a[0] == '-' && b[0] &= 0x30 && b[0] &= 0x39 || b[0] == '-') {
if (a[0] == '-' && b[0] == '-') {
big_add(&b[1], &a[1], c);
printf(&结果为: -%s\n&, c);
} else if (a[0] == '-' && b[0] != '-') {
big_sub(b, &a[1], c);
printf(&结果为: %s\n&, c);
} else if (a[0] != '-' && b[0] == '-') {
big_sub(a, &b[1], c);
printf(&结果为: %s\n&, c);
big_add(a, b, c);
printf(&结果为: %s\n&, c);
printf(&请输入整数\n&);
printf(&请输入减数(输入不是数字,后果自负): &);
scanf(&%s&, a);
printf(&请输入被减数(输入不是数字,后果自负): &);
scanf(&%s&, b);
if (a[0] &= 0x30 && a[0] &= 0x39 || a[0] == '-' && b[0] &= 0x30 && b[0] &= 0x39 || b[0] == '-') {
if (a[0] == '-' && b[0] == '-') {
big_sub(&b[1], &a[1], c);
printf(&结果为: %s\n&, c);
} else if (a[0] == '-' && b[0] != '-') {
big_add(&a[1], b, c);
printf(&结果为: -%s\n&, c);
} else if (a[0] != '-' && b[0] == '-') {
big_add(a, &b[1], c);
printf(&结果为: %s\n&, c);
big_sub(a, b, c);
printf(&结果为: %s\n&, c);
printf(&请输入整数\n&);
printf(&请输入乘数(输入不是数字,后果自负): &);
scanf(&%s&, a);
printf(&请输入被乘数(输入不是数字,后果自负): &);
scanf(&%s&, b);
if (a[0] &= 0x30 && a[0] &= 0x39 || a[0] == '-' && b[0] &= 0x30 && b[0] &= 0x39 || b[0] == '-') {
if (a[0] == '-' && b[0] == '-') {
big_mul(&a[1], &b[1], c);
printf(&结果为: %s\n&, c);
} else if (a[0] == '-' && b[0] != '-') {
big_mul(&a[1], b, c);
printf(&结果为: -%s\n&, c);
} else if (a[0] != '-' && b[0] == '-') {
big_mul(a, &b[1], c);
printf(&结果为: -%s\n&, c);
big_mul(a, b, c);
printf(&结果为: %s\n&, c);
printf(&请输入整数\n&);
printf(&请输入待计算阶乘的数(缓冲有限,最好不要超过7位数):&);
scanf(&%s&, a);
if (strlen(a) &= 7) {
if (a[0] & 0x30 || a[0] & 0x39) {
printf(&请输入自然数\n&);
big_fac(a, c);
printf(&%s! = %s\n&, a, c);
printf(&数据太大,无法计算\n&);
int main(int argc, char *argv[])
char choice[100];
while (1) {
show_choice();
scanf(&%s&, choice);
if (choice[0] &= '1' && choice[0] &= '4' && choice[1] == '\0') {
choice[0] -= 0x30;
show_input(choice);
} else if (choice[0] == '5' && choice[1] == '\0') {
printf(&谢谢使用!\n&);
printf(&无效的输入(请看大屏幕)\n&);
下边是程序运行截图。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14356次
排名:千里之外
原创:11篇
评论:23条
(1)(1)(1)(3)(5)加减乘除24点,加上括号,怎么判断有解还是无解? | 死理性派小组 | 果壳网 科技有意思
817648人加入此小组
比如四张A,好像就无解(加减乘除法)。
+ 加入我的果篮
用穷举法,列出每一种可能性,电脑程序就是这样算的
首先,4个数的四则运算的最大结果通常为四个数相乘.如果这四个数相乘都没能&=24,那其他算法肯定更没戏.因此如果4个数相同的话,它不能&24的4次方根,差不多是2点几的样子,也就是说4个数相同的情况,这个数不能&2虽然看起来像废话,但是至少走出了坚实的一步-_-b
因此如果4个数相同的话,它不能&24的4次方根,差不多是2点几的样子,也就是说4个数相同的情况,这个数不能&3
语言爱好者
引用 末日双子 的回应:首先,4个数的四则运算的最大结果通常为四个数相乘.如果这四个数相乘都没能&=24,那其他算法肯定更没戏.因此如果4个数相同的话,它不能&24的4次方根,差不多是2点几的样子,也就是说4个数相同的情况......四个数相同的情况就那么几种,你还只排除了3种…
引用 燃烧的键盘 的回应:用穷举法,列出每一种可能性,电脑程序就是这样算的这个给力~哈哈
直接SWC算法啊哈哈
引用 Maigo 的回应:引用 末日双子 的回应:首先,4个数的四则运算的最大结果通常为四个数相乘.如果这四个数相乘都没能&=24,那其他算法肯定更没戏.因此如果4个数相同的话,它不能&24的4次方根,差不多是2点几的样子,......只是在研究个通用算法嘛!若是计算结果不是24,比如是240,那能排除的就多了.
语言爱好者
那你用很多这样的规则也排除不了多少…而且你排除一组数的过程不还是穷举它们可能的运算么…引用 末日双子 的回应:引用 Maigo 的回应:引用 末日双子 的回应:首先,4个数的四则运算的最大结果通常为四个数相乘.如果这四个数相乘都没能&=24,那其他算法肯定更没戏.因此如果4个数相同的话,它不能&24的4次方......
我中学的奥术老师就是 给他四张牌他看一眼就知道能不能算24我一直觉得很奇妙=
错!!!!!!!!!!四个1是可以算出24点的方法如下:(1+1+1+1)!(阶乘啊~~~~~~~哇哈哈哈哈哈哈哈~~~~~~)
我想你大概是需要一个辅助工具 ...程序是若干年前写的 ... 现在应该还能用 ...
(C)2013果壳网&京ICP备号-2&京公网安备}

我要回帖

更多关于 java计算器加减乘除 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信