struct Product {
char mingzi[50];
char production_date[11];
char production_baozhiqi[11];// 格式为 yyyy-mm-dd
};
int compare_dates(char date1[], char date2[]) {
// 比较两个日期的大小,如果 date1 > date2,返回 1;如果 date1 == date2,返回 0;如果 date1 < date2,返回 -1。
int year1, month1, day1, year2, month2, day2;
sscanf(date1, "%d-%d-%d", &year1, &month1, &day1);
sscanf(date2, "%d-%d-%d", &year2, &month2, &day2);
if (year1 > year2) {
return 1;
} else if (year1 < year2) {
return -1;
} else {
if (month1 > month2) {
return 1;
} else if (month1 < month2) {
return -1;
} else {
if (day1 > day2) {
return 1;
} else if (day1 < day2) {
return -1; } else {
return 0;
}
}
}
}
void LOOK() {
int num_products;
printf("请输入超市系统中已经录入的商品数量:");
scanf("%d", &num_products);
struct Product products[num_products];
for (int i = 0; i < num_products; i++) {
printf("请输入第 %d 个商品的名称,生产日期和保质期(格式为 yyyy-mm-dd):", i+1);
scanf("%s %s %s", products[i].mingzi, products[i].production_date,products[i].production_baozhiqi);
}
char input_date[11];
printf("请输入当前日期(格式为 yyyy-mm-dd):");
scanf("%s", input_date);
printf("以下商品已经过期:\n");
for (int i = 0; i < num_products; i++) {
if (compare_dates(products[i].production_date+products[i].production_baozhiqi, input_date) < 0) {
printf("%s\n", products[i].mingzi);
}
}
}
怎么能将我的结构体形式的生产日期和保质期相加,我编译的时候显示不能直接相加
这种倒是不能相加 因为是C 语言,C++的话你可以写个操作符重载
但是c语言你可以写成
char* add_dates(char date1[], char date2[]) {
static char result[11] = {0};
int year1, month1, day1, year2, month2, day2;
sscanf(date1, "%d-%d-%d", &year1, &month1, &day1);
sscanf(date2, "%d-%d-%d", &year2, &month2, &day2);
sprintf(result, "%d-%d-%d", year1+year2, month1+month2, day1+day2);
return result;
}
// 调用时
printf("以下商品已经过期:\n");
for (int i = 0; i < num_products; i++) {
if (compare_dates(add_date(products[i].production_date, products[i].production_baozhiqi), input_date) < 0) {
printf("%s\n", products[i].mingzi);
}
}
提供下全部的代码以及你的需求,可以给你修改下
问题概述:
两个极大的数进行加法求和
思路:
根据列竖式方式解决问题,一位一位的满十进一
package algorithm;
import java.util.Arrays;
/**
* 大数加法
*/
public class BigNumAddition {
public static void main(String[] args) {
String num1 = "123";
String num2 = "98";
int[] numA = sub(num1);
int[] numB = sub(num2);
int[] add = add(numB, numA);
print(add);
}
public static int[] sub(String num){
int[] number = new int[num.length()];
for (int i=0;i<num.length();i++){
//低位在数组的前面,方便计算
number[num.length()-1-i] = num.charAt(i)-48;
}
return number;
}
public static int[] add(int[] number1,int[] number2){
int length = number1.length>number2.length?number1.length:number2.length;
if (number1.length > number2.length){
length = number1.length;
//将短数组长度放大到与长数组一致,简化代码
number2 = Arrays.copyOf(number2,length);
}else{
length = number2.length;
number1 = Arrays.copyOf(number1,length);
}
int[] result = new int[length+1];
for (int i=0;i<length;i++){
result[i] = result[i]+number1[i]+number2[i];
if(result[i]>=10){
result[i+1]++;
result[i] = result[i] - 10;
}
}
return result;
}
public static void print(int[] number){
for (int i=number.length-1;i>=0;i--){
//寻找最高有效位,因为加法结果数组长度比原数最长长度大1,所以只用判断最高位是否是0即可
//若次高位进位 则最高有效位必不为0 若无进位次高位必不为0 故可以只判断最高位
if (number[i] == 0 && i == number.length-1){
continue;
}
System.out.print(number[i]);
}
}
}
优化:
这时候是一位一位的进行进位计算,但int型可以存储的数字远大于一位数的大小,我们可以根据这一点对代码进行优化,每9位数为一组,可以减少运算次数,提高效率
products[i].production_date+products[i].production_baozhiqi
->
strcat(products[i].production_date+products[i],production_baozhiqi)
BTW,你的代码似乎还有别的问题,感觉是GPT生成的?