} else {
while(j >= 0) {
n2 = str2[j--] - '0';
curSum = n2 + another;
result[cur_rs++] = curSum % 10 + '0'; another = curSum / 10; }
if(another != 0)
result[cur_rs++] = another + '0'; }
result[cur_rs] = '\\0';
cur_rs = remove_zero(result, cur_rs); if(!flag) {
result[cur_rs++] = '-'; result[cur_rs] = '\\0'; }
reverse(result, strlen(result)); return cur_rs; }
int real_minus(char *str1, char *str2, char *result) //使用str1减去str2 {
char big[100], small[100]; int big_len, sml_len;
int len1 = strlen(str1); int len2 = strlen(str2);
bool flag = false; //用于标记str2是否比str1大
if(len1 < len2) flag = true; else if(len1 == len2) {
if(strcmp(str1, str2) == 0) {
result[0] = '0'; result[1] = '\\0'; return 1;
}else if(strcmp(str1,str2) < 0) flag = true; }
if(flag) //将str1和str2交换,确保str1指向的值是其中较大者,最后通过flag确定要不要给前面加-号 {
char *temp = str1; str1 = str2; str2 = temp;
len1 = strlen(str1); len2 = strlen(str2); }
int n1, n2, another = 0; //another表示是否有借位 int i, j;
int cur_rs = 0; int curMinus;
for(i = len1-1, j = len2-1; i>=0 && j>=0; i--,j--) {
n1 = str1[i] - '0'; n2 = str2[j] - '0';
if(n1 >= n2+another) {
result[cur_rs++] = (n1-n2-another) +'0'; another = 0; } else {
result[cur_rs++] = (n1+10-n2-another) + '0'; another = 1; } }
while(i >= 0) {
n1 = str1[i--] - '0'; if(another != 0) {
n1 -= another; another = 0; }
result[cur_rs++] = n1 + '0'; }
result[cur_rs] = '\\0';
cur_rs = remove_zero(result, cur_rs); if(flag) {
result[cur_rs++] = '-'; result[cur_rs] = '\\0'; }
reverse(result, cur_rs);
return cur_rs; }
void addi(const char *num1, const char *num2, char *result) {
int len1 = strlen(num1); int len2 = strlen(num2); int rs_len;
if(!len1 || !len2) return;
char str1[100], str2[100]; strncpy(str1, num1, len1); str1[len1] = '\\0';
strncpy(str2, num2, len2); str2[len2] = '\\0';
if(str1[0] == '-' && str2[0] == '-') {
move(str1, len1); move(str2, len2);
rs_len = real_add(str1, str2, result, false); }else if(str1[0] == '-') {
move(str1, len1);
rs_len = real_minus(str2, str1, result); }
else if(str2[0] == '-') {
move(str2, len2);
rs_len = real_minus(str1, str2, result); }else
rs_len = real_add(str1, str2, result, true); }
//int main(int argc, char *argv[]) int main() {
char num1[100],num2[100]; printf(\请输入两个整型数据:\\n\ scanf(\ char result[100];
memset(result, 0, 100); addi(num1,num2, result); printf(\
return 0; }
11.描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分 输入:输入10个整数,取值0~100 输出:输出及格线,10的倍数 #include
void bubblesort(int arr[]) { int i,j,temp; for(i=0;i<10;i++) for(j=0;j<9-i&&arr[j]>arr[j+1];j++) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } }
int GetPassLine(int a[]) { bubblesort(a); if(a[0]>=60) return 60; else return (((int)a[4]/10)*10); }
main() { int a[10]={0}; int result; printf(\请随机输入10个成绩(0-100):\\n\ scanf(\ printf(\ result=GetPassLine(a);
printf(\及格线为:%d\\n\ return 1; }
12.描述:一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、?n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。注:电灯数和学生数一致。
输入:电灯的数量 输出:亮着的电灯数量
样例输入:3 样例输出:1
#include
#define Max_Bubl_Num 65535
int GetLightLampNum(int n) { int BublNum[Max_Bubl_Num]={0}; //0表示灯灭,1表示灯亮 unsigned int i,j; unsigned int count=0; for(i=1;i<=n;i++) for(j=i;j<=n&&j%i==0;j++) { BublNum[j-1]+=1; BublNum[j-1]=BublNum[j-1]%2; } for(int k=0;k int main() { int n,result; printf(\请输入灯的数量(1-65535):\\n\ scanf(\ result=GetLightLampNum(n); printf(\最后亮灯的数量为:%d\\n\ return 0; } 13.描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。 地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15 输入:输入两个不同的站名 输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次 输入样例:A1 A3 输出样例:3 #include