C语言中的时间相加

有一个char[15]="20101211182030"表示2010年12月11日18时20分30秒
写一个函数把它加上一个时间 比如6小时15分23秒
输出也要是一个char[15]

注意是用C语言 不要用C++

思路:

1.将两个数分为前两位和后两位。

2.后两位先相加,如果超过60,则减去60,并进一位。

3.前两位相加还要加上进位,如果超过24,则减去24.

4.将前两位和后两位组合,形成最终要输出的形式

完整的程序代码如下,不懂之处可以看注解:

#include<stdio.h>

void main()

{

int a,b,c,d,e,f,ab,ce,df;

int i=0;

printf("Input two number:\n");//输入两行数据,每行一个整数。

scanf("%d%d",&a,&b);  //a代表第一个数,b代表第二个数

c=a/100;             //c代表a的前两位数

d=a%100;            //d代表a的后两位数

    e=b/100;           //e代表b的前两位数

f=b%100;          //f代表b的后两位数

    df=d+f;

if(df>=60)       //如果后两位相加超过60,则减去60,并进一位。

{

df-=60;

i++;

}

ce=c+e+i;

if(ce>=24)       //如果前两位相加超过24,则减去24。

{

ce-=24;

}

ab=ce*100+df;   //最后需要输出的数据

printf("The output is:\n%d\n",ab);

}

ps:运行结果如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
唉,终于搞定了,累死我了,菜就是没办法。
此程序已考虑到各月份天数,以及闰年的情况。
VS2010下编译成功,测试无问题。

#include <stdio.h>
int main()
{
int time_add(char[],char[]);
char time[15]={0};
char add[15]={0};
printf("Input the current time:");
scanf("%s",time);
printf("Input the time to be added:");
scanf("%s",add);

time_add(time,add);

printf("%s\n",time);

return 0;
}

int time_add(char time[],char add[])
{
int func(int day,int add_day,int month,bool is_leap_year,char mORd);
bool isLeapYear(int year);
int year,month,day,hour,minute,second;
int add_year,add_month,add_day,add_hour,add_minute,add_second;
bool is_leap_year;

sscanf(time,"%4d%2d%2d%2d%2d%2d",&year,&month,&day,&hour,&minute,&second);
sscanf(add,"%4d%2d%2d%2d%2d%2d",&add_year,&add_month,&add_day,&add_hour,&add_minute,&add_second);

is_leap_year=isLeapYear(year);

add_minute+=(second+add_second)/60;
second=(second+add_second)%60;

add_hour+=(minute+add_minute)/60;
minute=(minute+add_minute)%60;

add_day+=(hour+add_hour)/24;
hour=(hour+add_hour)%24;

add_month+=func(day,add_day,month,is_leap_year,'m');
day=func(day,add_day,month,is_leap_year,'d');

add_year+=(month+add_month<=12)?0:(month+add_month)/12;
month=(month+add_month==12)?12:(month+add_month)%12;

year+=add_year;

sprintf(time,"%04d%02d%02d%02d%02d%02d",year,month,day,hour,minute,second);
return 0;
}

int func(int day,int add_day,int month,bool is_leap_year,char mORd)
{
int day_temp,add_month=0,i;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(is_leap_year)
{
m[2]=29;
}

day_temp=day+add_day;
for(i=(month=12)?1:month+1;day_temp>m[i];i++)
{
day_temp-=m[i];
add_month++;

i=(i=12)?1:i;
}

if('m'==mORd)
{
return add_month;
}
if('d'==mORd)
{
return day_temp;
}
}

bool isLeapYear(int year)
{
if((year%400==0)||(year%100!=0)&&(year%4==0))
{
return true;
}
else
{
return false;
}
}本回答被提问者和网友采纳
第2个回答  2019-07-08
排名第一答案思路是对的,但代码有问题,修改代码如下:
#include <stdio.h>
int main()
{
int time_add(char[], char[]);
char time[15] = { "20190228120000" };
char add[15] = { "00000000120000" };
time_add(time, add);
printf("%s\n", time);
return 0;
}
int time_add(char time[], char add[])
{
int func(int day, int add_day, int month, bool is_leap_year, char mORd);
bool isLeapYear(int year);
int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;
int add_year = 0, add_month = 0, add_day = 0, add_hour = 0, add_minute=0, add_second = 0;
bool is_leap_year;
sscanf_s(time, "%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second);
sscanf_s(add, "%4d%2d%2d%2d%2d%2d", &add_year, &add_month, &add_day, &add_hour, &add_minute, &add_second);
is_leap_year = isLeapYear(year);
add_minute += (second + add_second) / 60;
second = (second + add_second) % 60;
add_hour += (minute + add_minute) / 60;
minute = (minute + add_minute) % 60;
add_day += (hour + add_hour) / 24;
hour = (hour + add_hour) % 24;
add_month += func(day, add_day, month, is_leap_year, 'm');
day = func(day, add_day, month, is_leap_year, 'd');
add_year += ((month + add_month) <= 12) ? 0 : ((month + add_month) / 12);
month = ((month + add_month) == 12) ? 12 : ((month + add_month) % 12);
year += add_year;
printf( "%04d%02d%02d%02d%02d%02d", year, month, day, hour, minute, second);
return 0;
}
int func(int day, int add_day, int month, bool is_leap_year, char mORd)
{
int day_temp, add_month = 0, i;
int m[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
if (is_leap_year)
{
m[2] = 29;
}
day_temp = day + add_day;
for (i=month; day_temp>m[i]; i++)
{
day_temp -= m[i];
add_month++;
}
if ('m' == mORd)
{
return add_month;
}
if ('d' == mORd)
{
return day_temp;
}
}
bool isLeapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
return true;
}
else
{
return false;
}
}
第3个回答  推荐于2018-02-21
#include <stdio.h>
int main()
{
int AH,AM,AS,BH,BM,BS,CH=0,CM=0,CS=0;
printf("请输入时间A");
L1:
scanf("%d %d %d",&AH,&AM,&AS);
if(AH>60||AH<0||AM>60||AM<0||AS>60||AS<0)
{
printf("不合法的时间,请重新输入");
goto L1;

}
printf("请输入时间B");
L2:
scanf("%d %d %d",&BH,&BM,&BS);
if(BH>60||BH<0||BM>60||BM<0||BS>60||BS<0)
{
printf("不合法的时间,请重新输入");
goto L2;

}
CS=BS+AS;
if(CS>=60)
{
CS=CS-60;
CM=AM+BM+1;
}
else
{
CM=AM+BM;
}
if(CM>=60)
{
CM=CM-60;
CH=AH+BH+1;
}
else
CH=AH+BH;
printf("时间和为:");
printf("%d,%d,%d",CH,CM,CS);
system("pause");

}本回答被网友采纳
第4个回答  2011-01-15
#include<stdio.h>
main()
{
int a;
double b=1,c=1,d=0;
printf("\nplease input a number\n");
scanf("%d",&a);
for(;b<a;++b); /*这里的for(;b<a;++b); 分号要去掉:b<=a;
就是说你输入3的话,只有1*2,应该是1*2*3,其他没任何问题*/
{
c=c*b;
d+=c;
}
printf("\n%f",d);
}
/*这里的for(;b<a;++b); 分号要去掉:b<=a;
就是说你输入3的话,只有1*2,应该是1*2*3,其他没任何问题*/
相似回答