C语言逻辑程序题

请问,用C语言.
怎么表达出两个已知数的最大公约数或最小公倍数???
怎么表达出某年的某个日期在当年是第几天???

求最小.大 公倍数的他们答的不错
我就不 班门弄斧了 (说实话: 我没做过求最小.大 公倍数) 你看看我的这个 求怎么表达出某年的某个日期在当年是第几天???
是不是你想要的结果
#include<stdio.h>
int f(int moon,int *m,int day)
{
int i;
for(i=0;i<moon;i++)
{
day+=m[i];
} day-=m[--moon];
return day;
}
main()
{
int print(int,int,int);

int year,moon,day;
printf("请输入年,月,日:");
scanf("%d%d%d",&year,&moon,&day);
if(moon>=1 && moon<=12 && day>=1 && day<32)
print(year,moon,day);
else printf("enter error");
}
print(int year,int moon,int day)

{ int m[12];
printf("\n* %d \\ %d \\ %d\n",year,moon,day);
if (year%4==0 && year%100!=0 || year%400==0) /* 检验输入年份是否为闰年 */
m[1]=29;
else
m[1]=28;
m[0]=m[2]=m[4]=m[6]=m[7]=m[9]=m[11]=31;
m[3]=m[5]=m[8]=m[10]=30;
printf("这日为该年的第 %d 天",f(moon,m,day)); return 0;
}
有错的话 希望能加我QQ 355884441
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-12-12
晕`~
还有这样的问题~~~
不过我的都还给老师了~~
第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));
}
第4个回答  2006-12-12
1\碾除法
2\简单的加减法
第5个回答  2006-12-13
第一题用%求,第二个用数组