- AMD GPU-k jövője - amit tudni vélünk
- Milyen billentyűzetet vegyek?
- AMD Navi Radeon™ RX 9xxx sorozat
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Lopakodva befutott a Radeon RX 9060
- AMD K6-III, és minden ami RETRO - Oldschool tuning
Hirdetés
Új hozzászólás Aktív témák
-
blaces
tag
Hello!
Ismét egy feladathoz kéne segítség.
A feladat két hosszú egész szám összeszorzása (olyannyira hosszú, hogy a long double-kbe se ment bele, ezért stringeztem) 3 napig tartott az összehegesztése...Feladat: Írj programot, amely két hosszú egész számot szoroz össze! Csak pozitív számok fordulnak elő a bemeneten, viszont ezek tetszőlegesen sok 0-val kezdődhetnek. Egy szám legfeljebb 100 számjegyből áll. A két szám két egymást követő sorban helyezkedik el. A program kimenetén nem lehetnek vezető nullák!
Bemenet: Kimenet:
2. eset:
0000789675 19375465800
24536
3. eset:
0000000000000000000000000000000000000000000000000000 0.
35363567#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUMBER 200
int toInt(char ch) {
return (ch - '0');
}
char toChar(int num) {
return (num + '0');
}
void eraseNewLine(char* str) {
size_t len;
len = strlen(str);
if (len > 0 && str[len-1] == '\n') {
str[len-1] = '\0';
}
}
void eraseNulls(char* str) {
unsigned int count = 0;
size_t i = 0;
size_t len;
char c;
len = strlen(str);
c = str[0];
while (c != '\0') {
c = str[i];
i++;
if (c == '0') {
count++;
} else {
break;
}
}
if (count == len) {
str[0] = '0';
str[1] = '\0';
} else if (count > 0) {
memcpy(str, str+count, (len-count+1));
}
}
void addNulls(int num, char* solution) {
size_t len;
unsigned int i;
len = strlen(solution);
if (num > 0) {
for (i = 0; i < num; i++) {
solution[len+i] = '0';
}
solution[i+len] = '\0';
}
}
void changeStr(char* s1, char* s2) {
char temp[2*MAX_NUMBER];
size_t l1;
size_t l2;
l1 = strlen(s1);
l2 = strlen(s2);
memcpy(temp, s1, l1+1);
memcpy(s1, s2, l2+1);
memcpy(s2, temp, l1+1);
}
void multiplyWithOneChar(char x, char* y, char* solution) {
unsigned int xv = toInt(x);
unsigned int yi;
unsigned int tempi;
unsigned int carry = 0;
char temp[2*MAX_NUMBER];
unsigned int i;
size_t len;
len = strlen(y);
for (i = 0; i < len; i++) {
yi = toInt(y[len-i-1]);
tempi = yi * xv + carry;
if (tempi > 9) {
carry = tempi / 10;
yi = tempi % 10;
} else {
carry = 0;
yi = tempi;
}
temp[i] = toChar(yi);
}
if (carry > 0) {
temp[i] = toChar(carry);
temp[i+1] = '\0';
} else {
temp[i] = '\0';
}
len = strlen(temp);
for (i = 0; i < len; i++) {
solution[i] = temp[len-i-1];
}
solution[i] = '\0';
}
void add(char* y, char* solution) { // solution = solution + y;
unsigned int yi;
unsigned int si;
unsigned int tempi;
unsigned int carry = 0;
char temp[2*MAX_NUMBER];
unsigned int i;
size_t len;
size_t lens;
len = strlen(y);
lens = strlen(solution);
if (lens > len) {
changeStr(y, solution);
len = strlen(y);
lens = strlen(solution);
}
for (i = 0; i < len; i++) {
yi = toInt(y[len-i-1]);
if (i < lens) {
si = toInt(solution[lens-i-1]);
} else {
si = 0;
}
tempi = yi + si + carry;
if (tempi > 9) {
carry = tempi / 10;
yi = tempi % 10;
} else {
carry = 0;
yi = tempi;
}
temp[i] = toChar(yi);
}
if (carry > 0) {
temp[i] = toChar(carry);
temp[i+1] = '\0';
} else {
temp[i] = '\0';
}
len = strlen(temp);
for (i = 0; i < len; i++) {
solution[i] = temp[len-i-1];
}
solution[i] = '\0';
}
void multiply(char* x, char* y, char* solution) {
size_t len;
unsigned int i;
char temp[2*MAX_NUMBER];
eraseNewLine(x);
eraseNewLine(y);
eraseNulls(x);
eraseNulls(y);
solution[0] = '0';
solution[1] = '\0';
len = strlen(y);
for (i = 0; i < len; i++) {
multiplyWithOneChar(y[len-i-1], x, temp);
addNulls(i, temp);
add(temp, solution);
}
}
int main() {
char first[MAX_NUMBER];
char second[MAX_NUMBER];
char solution[2*MAX_NUMBER];
fgets(first, MAX_NUMBER, stdin);
fgets(second, MAX_NUMBER, stdin);
multiply(first, second, solution);
printf("%s\n", solution);
return 0;
}és a második esett az ahol, a második számjegyig végig adja ki a nullákat, az elsőre(ezt nem írtam fentebb) és másodikra jó!
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Rock Shox Recon Silver Air gyorszáras villa eladó (29-es)!
- ÚJ Nvidia RTX 5060/TI 8-16Gb GDDR7 DLSS4.0 Ryzen 7 5800X 16x4.7Ghz/32GB/512Gb/1TB M SSD/2ÉV gamer PC
- ÚJ Nvidia RTX 3080 10Gb GDDR6x Ryzen 7 5800X 16x4.7Ghz/32GB/512Gb Nvme SSD/2ÉV gamer PC
- Szép! HP EliteBook 840 G8 Fémházas Hordozható Laptop Ultrabook 14" -50% i5-1145G7 16/512 Iris Xe FHD
- Eladó PC i7 8700, 16 GB RAM, GTX 1060, 460 GB SSD
- HIBÁTLAN iPhone 15 Pro Max 256GB White Titanium -1 ÉV GARANCIA - Kártyafüggetlen, MS3006, 90% Akksi
- HIBÁTLAN iPhone SE 2022 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS2984
- Bomba ár! Dell Latitude E7250 - i5-5GEN I 8GB I 256SSD I 12,5" HD I HDMI I Cam I W10 I Garancia!
- GeForce RTX 3060Ti (OEM HP)
- HIBÁTLAN iPhone 12 Pro Max 128GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS3106, 100% Akkumulátor
Állásajánlatok
Cég: FOTC
Város: Budapest