7-1 厘米换算英尺英寸
分数 15
作者 翁恺
单位 浙江大学
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/120.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

输入格式:
输入在一行中给出1个正整数,单位是厘米。

输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。英寸的值应小于12

输入样例:
170
输出样例:
5 6



import java.util.Scanner;

public class Main {
public static void main(String[] args) {
int cm = 0;
Scanner sc = new Scanner(System.in);
cm=sc.nextInt();
double m = cm/100.0;
double totalinch = m/0.3048;
int inch = (int)totalinch;
int feet = (int)((totalinch-inch)*12);
System.out.print(inch+" "+feet);
sc.close();

}
}
7-2 然后是几点
分数 15
作者 翁恺
单位 浙江大学
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 530 分表示为 530030 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 530 分表示为 530030 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:
1120 110
输出样例:
1310

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

// 读取输入的起始时间和流逝的分钟数
int time1 = sc.nextInt();
int minutesPassed = sc.nextInt();


// 拆分起始时间为小时和分钟
int startHour = time1/100;
int startMinute = time1%100;



// 计算起始时间的总分钟数
int totalMinutes = startHour*60+startMinute;

// 计算新的总分钟数
totalMinutes += minutesPassed;

// 计算新的小时和分钟
int newHour = totalMinutes/60;
int newMinute = totalMinutes%60;
// 处理小时数,确保在0到23之间
newHour = newHour%24;
newMinute = newMinute%60;
// 处理分钟数,确保在0到59之间

// 格式化输出,确保小时和分钟都是两位数
System.out.printf("%d%02d%n",newHour,newMinute);

}
}

7-3 逆序的三位数
分数 10
作者 翁恺
单位 浙江大学
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7

输入格式:
每个测试是一个3位的正整数。

输出格式:
输出按位逆序的数。

输入样例:
123
输出样例:
321

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int a = m%10;
int b = m/10%10;
int c = m/100;
int d = a*100+b*10+c;
sc.close();
System.out.print(d);
}
}
7-4 BCD解密
分数 10
作者 翁恺
单位 浙江大学
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12

输入格式:
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

输出格式:
输出对应的十进制数。

输入样例:
18
输出样例:
12



import java.util.Scanner;

public class Main {
public static void main(String[] args) {
int incorrect = 0;
Scanner sc = new Scanner(System.in);
incorrect = sc.nextInt();
sc.close();
int lowbyte = incorrect & 0x0F;
int highbyte = (int)(incorrect >> 4)&0x0F;
int correct = highbyte*10+lowbyte;
System.out.println(correct);
}

}

7-5 表格输出
分数 5
作者 乔林
单位 清华大学
本题要求编写程序,按照规定格式输出表格。

输入格式:
本题目没有输入。

输出格式:
要求严格按照给出的格式输出下列表格:

------------------------------------
Province Area(km2) Pop.(10K)
------------------------------------
Anhui 139600.00 6461.00
Beijing 16410.54 1180.70
Chongqing 82400.00 3144.23
Shanghai 6340.50 1360.26
Zhejiang 101800.00 4894.00
------------------------------------


public class Main {
public static void main(String[] args) {
System.out.println("------------------------------------");
System.out.println("Province Area(km2) Pop.(10K)");
System.out.println("------------------------------------");
System.out.println("Anhui 139600.00 6461.00");
System.out.println("Beijing 16410.54 1180.70");
System.out.println("Chongqing 82400.00 3144.23");
System.out.println("Shanghai 6340.50 1360.26");
System.out.println("Zhejiang 101800.00 4894.00");
System.out.println("------------------------------------");

}
}
7-6 混合类型数据格式化输入
分数 5
作者 乔林
单位 清华大学
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

输入格式:
输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

输出格式:
在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

输入样例:
2.12 88 c 4.7
输出样例:
c 88 2.12 4.70

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

// 读取输入
double float1 = sc.nextDouble(); // 读取第一个浮点数
int integer = sc.nextInt(); // 读取整数
char character = sc.next().charAt(0); // 读取字符
double float2 = sc.nextDouble(); // 读取第二个浮点数

sc.close(); // 关闭 Scanner

// 按照指定格式输出
System.out.printf("%c %d %.2f %.2f\n", character, integer, float1, float2);
}
}

6-10 阶乘计算升级版
分数 20
作者 陈越
单位 浙江大学
本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:
void Print_Factorial ( const int N );
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:
#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
int N;

scanf("%d", &N);
Print_Factorial(N);
return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000

void Print_Factorial(int N) {
if (N < 0) {
printf("Invalid input\n");
return;
}

// 初始化存储阶乘结果的数组
int factorial[10000];

// 阶乘的初始值是 1 (即 1! = 1)
int length = 1;
factorial[0] = 1;

// 计算阶乘
for (int i = 2; i <= N; i++) {
int carry = 0;

// 逐位乘以当前的数 i
for (int j = 0; j < length; j++) {
int product = factorial[j] * i + carry;
factorial[j] = product % 10; // 存储当前位
carry = product / 10; // 进位
}

// 处理最后的进位
while (carry > 0) {
factorial[length] = carry % 10;
carry /= 10;
length++;
}
}

// 打印结果(从高位到低位)
for (int i = length - 1; i >= 0; i--) {
printf("%d", factorial[i]);
}
printf("\n");
}