A+B问题说简单也简单,说麻烦确实也不简单,这里就我的一些理解做一些介绍,由于能力问题可能做得并不全面,也可能会有错误,或者不妥之处,希望各位见谅。
(1)A+B中最简单的就是输入两个数直接输出结果,比如:
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)//实现多组数据输入
{
printf("%d\n",a+b);//也可以在定义一个变量,但个人认为这样看起来简洁,
}
}
这里给出代码,就不多做说明了,相信都看得懂。 那既然这样是无限输入怎么停下来呢,其实也简单,只需改一下while(scanf("%d%d",&a,&b)!=EOF && a!=0 &&b!=0)这是以a,b都为零作为结束标志的,当然也可以用其他,这里其实也可以写成while(scanf("%d%d",&a,&b)!=EOF && a && b)效果是一样的(本人喜欢少写 懒吗)所以更喜欢用后者。那么到这里如果要多组数据相信也不是难事了吧!!!(这样为了简单还是加个变量来存和吧!!要根据情况灵活运用吗),顺便提一句,程序编写,并没有太多格式要求 很灵活,但最好用大众较认可的 整洁的。使我们程序更能得到认可增加可读性,也为以后维护方便。(这是闲话了,一旦形成合适自己的风格就坚持 不要轻易改变 你懂得)。进入正题。那么,我们已经可以写出可以停止的了,那么我要求多一点.比如多组数据,多个答案之间要有空格(注意是之间)又该怎么办,,其实也简单,下面看代码然后作解释。
#include <stdio.h>
int main()
{
int a,b,c,sum=0,i,j;
while(scanf("%d",&a)!=EOF&&a)//输入一个数表示有多少组数需要计算,以0作为结束标志;
{
for(i=0;i<a;i++)
{
scanf("%d",&b);//每组数有b个数要相加;
for(j=0;j<b;j++)
{
scanf("%d",&c);
sum+=c;//用sum表示数据的和;
}
printf("%d\n",sum);
if(i<a-1)/*加一个条件判断,加上空行,空格也类似,这样在最后一个答案就不会有多余空行输出了,。那么空格(空行)只有这种写法???怎么可能??种类繁多啊!来举个例子:先定义一个变量 k=b;if(k)printf("\n");printf("%d\n",sum,k++);怎样是不是感觉简洁了一些呢!注意一个问题(k++要放后边 不然就要输出k的值了);*/
printf("\n");
sum=0;//记得在每组数计算完成后 要对sum清零!!!!!这里很好理解 却经常会忘掉!!!!切记;
}
}
}
先来介绍一下要求吧!如上注释 相信不难看出 先输入一个数a表示有多少组数据要计算,然后每组数有几个数也要告知就用b表示了(其实这是一定要有的,因为没有这个限制,程序就不知道何时结束计算,当然你也可以用前面介绍的方法对其加结束条件,但那样程序看起来就不那么让人舒服)。
什么???跳度有点大!!好吧!!那再写个代码然后过度到上边 好吧!!来看代码!
//此题不要求有空格:
#include <stdio.h>
int main()
{
int a,b,sum=0,i;
while(scanf("%d",&a)!=EOF&&a)
{
for(i=0;i<a;i++)
{
scanf("%d",&b);
sum+=b;
}
printf("%d\n",sum);
sum=0;
}
}
相信都看的懂哈!!!
好吧!!有没有觉得 哪有不爽!!是啊!!如果我就是不知道有多少数据呢!!怎么办!!给个方法!自己多看看参悟
(对于初学者可能不太好理解,但是没关系,其实也很好理解的<img alt="大笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif" />要死在看不出来 就先放一下,以后学了再看就会恍悟)这里用了与前面不同的c++。还是先看代码:
#include <iostream>
#include <string>
#include <sstream>//调用stringstream
using namespace std;
int main()
{
string line;
while(getline(cin,line))//用getline读取输入的 字符串流
{
int sum = 0,x;
stringstream ss(line);//创建新的字符串流 ss 来存储输入的流;
while(ss >> x)//读取字符串流中的 整数x
sum += x;//进行加和
cout << sum << "\n";//输出结果;
}
return 0;
}
这是用c++写的,你还没学c++,,,,,怎么这样!!!好吧!!没关系啦!!等学过了,再来看也是很好的嘛!!这里就不做什么介绍了,!你以为我不会!!好吧!你蛮有眼光的!!总有一天我们会懂得!!此题是说 输入一行(是一行)以空格隔开的数(空格隔开啊!!)进行加和!而事先 并不知道有多少数据。。然后输出。满足你了吧!!!
啊!!!还没有!!你是要考我么!!遇到数较大怎么办???那就用long long(注意输入输出 用lld)!!神马!这也不够!!那怎么办!!对了 不是还有大数呢么!!大数 就是很大的数啊!!
先看代码好吗!!来 一起学习:
#include <stdio.h>
#include <string.h>
char a[1110000];
char b[1110000];
int aa[1110000];
int bb[1110000];
int max(int x,int y)//求两者中大的数
{
int m;
if(x>=y)
{
m=x;
}
else
{
m=y;
}
return m;
}
int main()
{
int i,j,k,n;
while (scanf("%d",&n)!=EOF)
{
for(k=1;k<=n;k++)
{
scanf("%s %s",a,b);
memset(aa,0,sizeof(aa));
memset(bb,0,sizeof(bb));//使用前先清空 是个好习惯
for(j=0,i=strlen(a)-1;i>=0;i--,j++)
aa[j]=a[i]-'0';//将字符型转为数字,同时倒叙;
for(j=0,i=strlen(b)-1;i>=0;i--,j++)
bb[j]=b[i]-'0';
for(i=0;i<max(strlen(a),strlen(b));i++)//需要将所有数加上 故取长的那一个作为依据
{
aa[i]=aa[i]+bb[i];将和的结果放在aa里;
if(aa[i]>=10)//判断是否需要进位;
{
aa[i]%=10;
aa[i+1]+=1;
}
}
printf("Case %d:\n",k);
printf("%s + %s = ",a,b);
if(aa[max(strlen(a),strlen(b))]==0)
for(i=max(strlen(a),strlen(b))-1;i>=0;i--)
{
printf("%d",aa[i]);
}
else
for(i=max(strlen(a),strlen(b));i>=0;i--)
{
printf("%d",aa[i]);//依次输出;
}
printf("\n");
if(k<n)
printf("\n");
}
}
}
好长啊!!有木有???慢慢看不急啊!!!其实这是跟我们平时手算差不多的步骤。大数减法也一样,乘除发 思想差不多这里就不做介绍了《,大家有兴趣可以自己查 学习!!(好吧!!是因为我还不太会,可这不是我的错啊!人家还没学会吗),!!!!!等等 这是要完了吗!!好像是完了耶!!可为什么我觉得还有!!!
就是啊!!!如果加上进制转化怎样!!简单么??看一下:
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%x %x",&a,&b)!=EOF)
printf("%d\n",a+b);
return 0;
}
不难吧!!都说了!!!这里要注意的问题是进制转化的强制转化。。(虽然好像那么暴力,,,有时候简单粗暴也是好方法!不是么人生亦如此)。
到这里呢!!A+B总算是接近尾声了!!!其实写代码对我们很有好处,,学习任何一样东西都差不多,,他会影响你的人生,即使你并不知道,但你不能否认,这会使你形成特有的思维方式,对你的生活方式 处世态度都有潜在影响!!对吧!!所以养成良好习惯!认真做每一件事 不知不觉中你会改变!!虽然你并未察觉(你可以过一段时间回顾一下仔细想想会发现变化的 或多或少)。人生是不停留 一路向前走!!我们能做的就是努力过好每一天 尽量不留遗憾!!!回头 在人生末尾!!将一生做个总结!!那要怎么做呢!!看一下吧!!!:
#include <stdio.h>
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(i=1;i<=n;i++)
sum+=i;
printf("%d\n\n",sum);
}
return 0;
}
//1+。。。。。。。+n=?;
怎么突然。。。。。。
是啊!!这里还有一个问题没提到呢!!就是“总结人生”啊!!!从1加到你想要的数;
有没有 感觉被骗了!!这才是人生啊!!感觉要结束了!!其实只要发现 是不是还有什么在呢!!还有可以为之努力。。可以做下去之事,,所以不要让自己放松!你永远不知道未来对你意味着什么!要时刻准备着啊!! 别紧张了!这下真的没了!!,至少我还没想到!!这里的问题很多不仅在此处有用!放到其他地方也是能用 不 是很有用的!!数组是很有用的!!格式输出很重要!!这些 要充分理解!才可以真的 算过关了啊!!
我也是刚接触acm 学习中 应该时常总结一下!这样 以后可以看!知道当时的想法!!及心境!!这就像日记!是饱含感情的!!如果你看了我的。。是我们的缘分。。谢谢你!!同时也祝贺你 和我一起将踏上“不归路”,。继续努力 继续坚持!!当坚持不下去了 想想当初为何选择!!莫忘初心 看看我的分享!也是激励自己!让我们一起走下去..走下去 生命的意义就是活下去。。活着的意义就是 走下去 坚持不懈走下去!!!因是第一次写博客!!可能有些地方不合适!!欢迎各位前辈,老师,大神。指出,还有能力有限!!有什么错误 不妥!!欢迎指正!!
诚望斧正!!!!