第2个回答 2006-12-13
//第一题我也做了一下
//辗转相除法
#include "stdafx.h"
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
int t,k;
t=a%b;
if(t==0)
{
k=b;
}else
{
k=gcd(b,t);
}
return k;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<gcd(a,b);
}
第二题比较容易想到思路。
-------------------------------
//假设这个日期是这样放的:
int year,mon,day;
Daysofmon[]={31,28,31,30,31,30,31,31,30,31,30,31};
/*设置一个数组放每个月的天数。用来循环时用的。闰年二月有29天,这个问题后面再来考虑。
大体思路就是:⒈今年的第一天到你这个日期所在月的天数
加上
⒉这个日期在这个月内是第几天。(两个部分)
前一个部分:用个循环就ok了。*/
bool leapyear(int year) //判断是否闰年
{
bool ly;
if((year%4==0&&year%100!=0)||year%400==0)ly=1;
else ly=0;
return ly;
}
int sum=0;
if(leapyear(year)==1)Daysofmon[1]=29;
for(int i=0;i<mon;i++)
{
sum+=Daysofmon[i];
}
//这个sum加起来就是第一部分了。然后sum加上day就是结果了。。。。
--------------------------------------
我也是初学者,而且是表达能力特差,如果发现我做错了,请见谅。
第3个回答 2006-12-12
#include <stdio.h>
#include <string.h>
//最大公因数
//a,b为正整数
int gcd(int a, int b)
{
int c;
do{
c=a%b;
a=b;
b=c;
}while(c);
return a;
}
//最大公因数
//a,b为正整数
int lc(int a, int b)
{
if (a==0 || b==0)
return(0);
return (a*b/gcd(a,b));
}
//是不是闰年
int isrn(int year)
{
if (year%100==0)
return (year%400==0);
else
return (year%4==0);
}
//第几天,没有对数据进行合法性检验
int day(int y,int m,int d)
{
static int data[]={31,28,31,30,31,30,31,31,30,31,30,31};
int i = 0;
int rt= 0;
for (i=1;i<m;i++)
rt+=data[i-1];
rt+=d;
if (m>=3)
return (rt+isrn(y));
return rt;
}
main()
{
printf("(45,105)=\t%d\n",gcd(45,105));
printf("[45,105]=\t%d\n",lc(45,105));
printf("2000,2,27:\t%d\n",day(2000,2,27));
printf("2000,3,1:\t%d\n",day(2000,3,1));
printf("2006,2,27:\t%d\n",day(2006,2,27));
printf("2006,12,31:\t%d\n",day(2006,12,31));
}