Pendeteksian Penjiplakan Kode Program C dengan Bisecting K-means

PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C
DENGAN BISECTING K-MEANS

ARIZAL NOTYASA

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2013

PERNYATAAN MENGENAI SKRIPSI DAN
SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA
Dengan ini saya menyatakan bahwa skripsi berjudul Pendeteksian
Penjiplakan Kode Program C dengan Bisecting K-means adalah benar karya saya
denganarahan dari komisi pembimbing dan belum diajukan dalam bentuk apa pun
kepada perguruan tinggi mana pun. Sumber informasi yang berasal atau dikutip
dari karya yang diterbitkan maupun tidak diterbitkan dari penulis lain telah
disebutkan dalam teks dan dicantumkan dalam Daftar Pustaka di bagian akhir
skripsi ini.
Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut

Pertanian Bogor.
Bogor, Juni 2013
Arizal Notyasa
NIM G64070038

ABSTRAK
ARIZAL NOTYASA. Pendeteksian Penjiplakan Kode Program C dengan
Bisecting K-means. Dibimbing oleh AHMAD RIDHA.
Penjiplakan tugas berupa kode program merupakan masalah yang sering
dihadapi oleh berbagai institusi akademik. Pendeteksian penjiplakan secara
manual memakan banyak waktu dan tenaga. Oleh sebab itu, sebuah sistem yang
dapat membantu pendektesian penjiplakan kode program dibutuhkan.
Pendeteksian dapat dilakukan dengan mengelompokkan kode-kode program yang
mirip berdasarkan struktur kodenya. Cara ini dilakukan pada penelitian
sebelumnya dengan menggunakan iterasi K-means otomatis. Iterasi K-means
otomatis ini, walau dapat menghasilkan clusters yang cukup baik, tapi
membutuhkan waktu eksekusi yang lama. Tujuan penelitian ini adalah
meningkatkan efisiensi waktu dan clusters hasil pendeteksian dengan
menggunakan algoritme bisecting K-means. Hasil penelitian ini menunjukkan
bahwa ada peningkatan efisiensi waktu yang cukup signifikan dari 11.68 detik

menjadi 6.64 detik. Algoritme bisecting K-means juga menghasilkan jumlah
clusters yang lebih sedikit dengan nilai Rand Index yang lebih baik daripada
iterasi K-means. Selain itu, percobaan dengan 2-gram hingga 6-gram
menunjukkan bahwa 4-gram memiliki kinerja yang paling baik.
Kata kunci: bisecting k-means, hierarchical clustering, pendeteksi penjiplakan

ABSTRACT
ARIZAL NOTYASA. C Source Code Plagiarism Detection Using Bisecting Kmeans. Supervised by AHMAD RIDHA.
Plagiarism of source codes assignments is a widespread problem in
academic institutions. Manual plagiarism detection is time and energy consuming.
Therefore, a system that can help detecting this plagiarism is needed. The
detection can be done by grouping similar source codes based on their structure.
This method is used in previous research by using automatic K-means iterations
algorithm. That algorithm, although produced decent clusters, had a long
execution time. The purpose of this research is to improve the time efficiency and
clusters result quality by using bisecting K-means algorithm. The results showed a
significant improvement in execution time from 11.68 seconds to 6.64 seconds.
Bisecting K-means also produced fewer clusters with slightly better Rand Index
than K-means iterations. Furthermore, experiments using 2-gram to 6-gram
showed that 4-gram resulted in the best performance.

Keywords: bisecting K-means, hierarchical clustering, plagiarism detection

PENDETEKSIAN PENJIPLAKAN KODE PROGRAM C
DENGAN BISECTING K-MEANS

ARIZAL NOTYASA

Skripsi
sebagai salah satu syarat untuk memperoleh gelar
Sarjana Komputer
pada
Departemen Ilmu Komputer

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2013

Judul Skripsi : Pendeteksian Penjiplakan Kode Program C dengan Bisecting

K-means
Nama
: Arizal Notyasa
NIM
: G64070038

Disetujui oleh

Ahmad Ridha, SKom MS
Pembimbing

Diketahui oleh

Dr Ir Agus Buono, MSi MKom
Ketua Departemen

Tanggal Lulus:

PRAKATA
Puji dan syukur penulis panjatkan ke hadirat Allah subhanahu wa-ta’ala

atas rahmat dan hidayah-Nya sehingga penulis dapat menyelesaikan tugas akhir
ini. Shalawat serta salam juga penulis sampaikan pada junjungan Nabi besar
Muhammad shallallahu ‘alaihi wa sallam beserta keluarga dan sahabatnya.
Banyak pihak yang telah membantu penulis hingga terselesaikannya tugas
akhir ini. Oleh sebab itu, penulis ingin mengucapkan rasa terima kasih kepada:
1 Ayahanda Listyo Sumitro dan ibunda Diah Aryati serta kakak penulis Arfika
Nurhudatiana dan Yulianto yang senantiasa mendoakan, memotivasi, dan
memberikan kasih sayangnya kepada penulis.
2 Bapak Ahmad Ridha, SKom MS selaku dosen pembimbing yang telah
membimbing dan mengarahkan penulis selama penelitian tugas akhir ini.
3 Bapak Sony Hartono Wijaya, SKom MKom dan Bapak Mushthofa, SKom
MSc selaku dosen penguji.
4 Seluruh teman-teman Ilkomerz 44 atas ilmu, semangat, dan dukungannya
selama penulis melakukan penelitian.
5 Sahabat-sahabat di T3S: Trijaya, Wahyu, Putri, Nadea, Nina, Ikhwan, dan Adi
atas segala suka dan duka yang dialami bersama.
Akhir kata, penulis mohon maaf apabila dalam tulisan ini masih terdapat
banyak kekurangan. Penulis berharap semoga tulisan ini dapat bermanfaat bagi
para pembaca.


Bogor, Juni 2013
Arizal Notyasa

DAFTAR ISI
DAFTAR TABEL

v

DAFTAR GAMBAR

v

DAFTAR LAMPIRAN

v

PENDAHULUAN

1


Latar Belakang

1

Perumusan Masalah

2

Tujuan Penelitian

2

Manfaat Penelitian

2

Ruang Lingkup Penelitian

3


METODE

3

Pengambilan dan Pemilihan Data

3

Pengelompokan Manual

3

Praproses Data

4

Bisecting K-means

6


Validasi Hasil Clustering

8

Perbandingan dengan Penelitian Sebelumnya

9

HASIL DAN PEMBAHASAN

10

Pengambilan dan Pemilihan Data

10

Pengelompokan Manual

10


Praproses Data

11

Bisecting K-means

12

Validasi Hasil Clustering

16

Perbandingan dengan Penelitian Sebelumnya

17

Rentang Nilai i Terbaik

19


Pengaruh Ukuran N-gram terhadap Hasil Clustering

19

SIMPULAN DAN SARAN

20

Simpulan

20

Saran

21

DAFTAR PUSTAKA

21

RIWAYAT HIDUP

27

DAFTAR TABEL
1
2
3
4
5
6
7
8
9
10
11
12
13

Contoh aturan konversi kode program
Set data awal
Set data setelah pengelompokan manual
Term frequency
Hasil percobaan clustering untuk DataSet1
Hasil percobaan clustering untuk DataSet2
Hasil percobaan clustering untuk DataSet3
Hasil percobaan clustering untuk DataSetAll
Nilai RI, jumlah clusters, jumlah dokumen, dan waktu eksekusi
clustering setiap set data
Perbandingan hasil clustering bisecting K-means dengan iterasi Kmeans pada saat nilai i=0.97
Perbandingan hasil clustering bisecting K-means dengan iterasi Kmeans pada saat nilai i terbaik
Nilai i terbaik untuk setiap set data
Hasil percobaan clustering dengan 2-gram hingga 6-gram untuk setiap
set data

5
10
10
12
13
13
14
15
15
17
18
19
20

DAFTAR GAMBAR
1
2
3
4
5

Tahapan penelitian
Praproses data
Ilustrasi kesamaan kosinus
False negative dokumen D42 dan D44 pada DataSet1
False positive dokumen D25 dan D59 pada DataSet1

3
4
7
16
17

DAFTAR LAMPIRAN
1 Contoh kode program dari masing-masing set data yang digunakan
dalam penelitian
2 Hasil pengelompokan manual untuk DataSet1
3 Hasil pengelompokan manual untuk DataSet2
4 Hasil pengelompokan manual untuk DataSet3
5 Tabel aturan konversi kode program menjadi token sederhana

22
23
24
25
26

PENDAHULUAN
Latar Belakang
Penjiplakan atau plagiarisme merupakan suatu masalah yang sering dihadapi
oleh institut-institut akademik. Penjiplakan pada kode program adalah
penggunaan kembali struktur dan syntax bahasa pemrograman yang berasal baik
dari mahasiswa ataupun sumber lainnya (Burrows 2004). Tugas akademik berupa
kode program umumnya dikumpulkan dalam bentuk berkas digital. Hal ini
menyebabkan tugas kode program rentan terhadap aksi penjiplakan.
Saat ini pendeteksian penjiplakan semakin sulit dilakukan. Hal ini
disebabkan oleh bertambahnya jumlah mahasiswa dan semakin mudahnya
mahasiswa untuk saling berbagi hasil perkerjaan mereka baik melalui internet
maupun media lainnya. Pendeteksian juga semakin dipersulit dengan adanya
modifikasi kode program yang dilakukan oleh mahasiswa untuk mengelabui
pendeteksian. Modifikasi yang dilakukan antara lain penambahan atau
penghapusan baris komentar atau pengubahan nama variabel atau fungsi.
Pendeteksian penjiplakan dengan menggunakan tenaga manusia akan memakan
banyak waktu dan tenaga. Oleh sebab itu, dibutuhkan suatu sistem yang dapat
membantu pendeteksian penjiplakan kode program secara otomatis.
Burrows (2004) telah melakukan pendeteksian penjiplakan untuk
repositories kode program berskala besar. Pendeteksian yang dilakukan Burrows
ialah dengan mengindeks semua kode program yang terkumpul kemudian
melakukan query terhadap hasil indexing tersebut untuk mendapatkan kode-kode
program yang mirip. Burrows menggunakan cara pendeteksian penjiplakan
structure-oriented code-based system. Sistem berorientasi struktur kode program
ini membuat representasi sederhana dari kode program. Sistem ini sengaja
mengabaikan elemen yang mudah dimodifikasi seperti komentar, whitespace dan
nama variabel. Sistem berorientasi struktur ini juga tidak rentan terhadap
penambahan kode program yang bersifat redundant. Mahasiswa harus
memodifikasi sebagian besar kode program apabila ingin mengelabui
pendeteksian (Bowyer dan Hall 1999, Gitchel dan Tran 1999, Prechelt et al. 2002
dalam Burrows 2004).
Gumilang (2013) menggunakan structure-oriented code-based system untuk
pendeteksian penjiplakan kode program C dengan clustering. Pendeteksian yang
dilakukan Gumilang ialah dengan mengelompokkan kode-kode program
berdasarkan kemiripan strukturnya. Proses pengelompokan pada penelitian
Gumilang dilakukan dengan menggunakan algoritme flat clustering K-means.
Flat clustering memiliki kelemahan, yaitu harus ditentukannya jumlah clusters
keluaran yang diinginkan secara manual. Hal ini pada penelitian Gumilang diatasi
dengan melakukan iterasi K-means otomatis. Iterasi K-means otomatis yaitu
melakukan clustering menggunakan K-means dengan nilai K bertambah secara
otomatis pada setiap iterasinya. Iterasi berhenti apabila anggota-anggota clusters
hasil sudah cukup dekat dengan centroid-nya. Iterasi K-means otomatis ini
membutuhkan waktu eksekusi yang lama. Hal ini dikarenakan pada setiap iterasi
dilakukan proses clustering dengan jumlah dokumen yang sama dan jumlah
centroids yang semakin bertambah.

2
Pengelompokan tanpa perlu menentukan terlebih dahulu jumlah cluster-nya
dapat dilakukan dengan menggunakan hierarchical clustering. Hierarchical
clustering terbagi menjadi 2 jenis, yaitu hierarchical agglomerative clustering
(HAC) dan hierarchical divisive clustering (HDC). HAC menggunakan
pendekatan bottom-up, sedangkan HDC menggunakan pendekatan top-down.
HDC, dalam beberapa kasus, terbukti dapat menghasilkan hierarki clusters yang
lebih akurat dibandingkan dengan HAC. Hal ini dikarenakan HDC menggunakan
pendekatan top-down dan memiliki informasi penyebaran seluruh dokumen sejak
awal clustering (Manning et al. 2008). HDC juga dapat berjalan lebih cepat
dibandingkan dengan HAC apabila dikombinasikan dengan algoritme flat
clustering efisien seperti K-means.
Pendeteksian penjiplakan pada penelitian ini dilakukan dengan menerapkan
structure-oriented code-based system dan kode-kode program yang mirip
kemudian dikelompokkan dengan HDC. Algoritme HDC yang digunakan adalah
bisecting K-means. Bisecting K-means adalah algoritme HDC yang menggunakan
K-means untuk pemisahan setiap cluster-nya.

Perumusan Masalah
Perumusan masalah dalam penelitian ini adalah
1 Bagaimana mengimplementasikan structure-oriented code-based system dan
algoritme HDC bisecting K-means dalam pendeteksian penjiplakan kode
program C.
2 Apakah pengelompokan kode-kode program dengan menggunakan bisecting
K-means membutuhkan waktu eksekusi yang lebih singkat dibandingkan
dengan iterasi K-means otomatis.
3 Apakah bisecting K-means dapat menghasilkan clusters yang lebih baik
dibandingkan dengan iterasi K-means otomatis.

Tujuan Penelitian
Tujuan dari penelitian ini ialah mengimplementasikan structure-oriented
code-based system dan algoritme HDC bisecting K-means untuk membantu
pendeteksian penjiplakan pada kode program C secara otomatis, cepat, dan akurat.

Manfaat Penelitian
Manfaat penelitian ini ialah mempermudah pendeteksian penjiplakan kode
program sehingga efisiensi kerja staf akademik dapat meningkat dan aksi
penjiplakan yang dilakukan mahasiswa berkurang.

3
Ruang Lingkup Penelitian
Ruang lingkup penelitian ini adalah
1 Data yang digunakan adalah 233 buah kode program tugas pemrograman
berbahasa C.
2 Penelitian ini mengasumsikan tidak adanya makro pada kode program
sehingga preprocessor directives akan dihilangkan semua.

METODE
Secara garis besar penelitian ini memiliki 6 tahapan. Tahapan-tahapan pada
penelitian ini dapat dilihat pada Gambar 1.
Pengambilan
dan pemilihan
data

Pengelompokan
manual

Perbandingan
dengan penelitian
sebelumnya

Praproses
data

Bisecting
K-means

Validasi hasil
clustering

Gambar 1 Tahapan penelitian
Pengambilan dan Pemilihan Data
Data yang digunakan sebagai korpus kode program pada penelitian ini
diperoleh dari Bagian Komputasi Terapan, Departemen Ilmu Komputer. Data
pada penelitian ini berupa berkas digital kode program bahasa C. Kode program
yang dipilih berasal dari tugas-tugas pemrograman yang memiliki tingkat
kesulitan tidak terlalu mudah dan tidak terlalu susah. Hal ini dikarenakan tugas
yang terlalu mudah akan memiliki variasi algoritme pemecahan yang sedikit,
sedangkan tugas yang terlalu susah cenderung memiliki jumlah kode program
yang sedikit karena banyak mahasiswa yang tidak mengumpulkan tugas.

Pengelompokan Manual
Pengelompokan manual pada penelitian ini dilakukan melalui 2 tahap.
Tahap pertama adalah pemeriksaan nilai output kode program dan tahap kedua
adalah pemeriksaan struktur dan algoritme kode program. Pada tahap pertama
setiap kode program dijalankan dan diperiksa nilai output-nya. Kode-kode
program yang memiliki nilai output yang sama akan dikelompokkan ke dalam
satu cluster yang sama. Selanjutnya pada tahap kedua, kode-kode program tiap

4
cluster tersebut diperiksa strukturnya. Kode-kode program dengan struktur dan
algoritme yang secara signifikan sama dikelompokkan ke dalam cluster yang
sama dan kode program yang berbeda dipisah ke dalam cluster yang berbeda.

Praproses Data
Praproses data dilakukan untuk mengubah data mentah, yaitu kode-kode
program C, ke format yang dapat diproses dalam clustering, yaitu tabel term
frequency. Praproses data pada penelitian ini terbagi ke dalam 4 tahapan. Gambar
2 menunjukkan alur tahapan praproses data.

Tabel term
frequency

Kumpulan
kode program

Pembuangan
preprocessor
directives

Tokenisasi

Penyederhanaan

N-gram

Gambar 2 Praproses data
Pembuangan preprocessor directives
Tahap pertama adalah pembuangan preprocessor directives. Preprocessor
directives adalah sejumlah baris di awal kode program yang diawali dengan
karakter “#”. Pembuangan ini dilakukan karena pada penelitian ini diasumsikan
tidak adanya penggunaan makro pada kode program.
Tokenisasi
Proses Tokenisasi dilakukan untuk mendapatkan keywords dan special
characters dari kode program. Pada proses tokenisasi, karakter whitespace
dibuang semua sehingga didapat term atau string uniknya saja (Manning et al.
2008). Baris komentar pada kode program dibuang karena tidak berpengaruh
terhadap output program. Karakter “;” juga dibuang karena merupakan karakter
umum yang selalu digunakan di setiap akhir baris kode program C.
Penyederhanaan
Selanjutnya pada proses penyederhanaan, keywords dan special characters
kode program diubah menjadi token sederhana agar lebih ringkas dan mudah
dalam pembentukan term. Kode program yang telah diubah menjadi sebuah string
panjang token sederhana disebut dengan token stream (Burrows 2004). Konversi
kode program menjadi token sederhana dilakukan berdasarkan aturan konversi
seperti pada Tabel 1.

5
Tabel 1 Contoh aturan konversi kode program
Keywords

Token sederhana

int
for
return
(
)
{
}
=
<
+
,
ALPHANUM
STRING

A
M
R
H
I
K
L
O
M
A
J
N
5

Tabel 1 memperlihatkan contoh aturan konversi beberapa keywords dan
special characters kode program C menjadi token sederhana. ALPHANUM
adalah nama fungsi, nama variabel, atau nilai variabel. STRING adalah sederetan
karakter yang diapit oleh tanda "" (kutip ganda). Berikut adalah contoh kode
program yang diubah menjadi token stream:
1
2
3
4
5
6
7
8

#include
int main (){
int var;
for (var=0; var i maka looping dihentikan. I adalah ratarata jarak setiap anggota clusters ke centroid cluster-nya. Nilai i adalah bilangan
desimal antara 0 sampai 1. Semakin besar nilai i, semakin dekat rata-rata jarak
setiap dokumen dengan centroid-nya sebelum looping dihentikan. Secara umum,
semakin besar nilai i maka semakin banyak looping yang dilakukan dan berarti
semakin banyak jumlah clusters yang dihasilkan.
Penentuan nilai i terbaik dilakukan dengan melakukan percobaan.
Percobaan dilakukan dari nilai i=0.85 sampai i=1.00 dengan increment sebesar
0.01. Pada masing-masing nilai i tersebut dilakukan percobaan sebanyak 5 kali.
Setiap percobaan i dicatat jumlah clusters, nilai akurasi Rand Index, nilai I, dan
lama waktu eksekusinya.

Validasi Hasil Clustering
Validasi hasil clustering dilakukan untuk mengukur seberapa baik hasil
clustering yang didapat. Validasi dilakukan dengan membandingkan clusters hasil
bisecting K-means dengan clusters hasil pengelompokan manual. Penelitian ini
menggunakan pengukuran akurasi Rand Index (RI) untuk validasi hasil clustering.
RI merepresentasikan hasil clustering sebagai kumpulan keputusan. Nilai
akurasi RI adalah persentase dari keputusan-keputusan yang benar (Manning et al.
2008). Keputusan benar adalah apabila 2 dokumen yang mirip dikelompokkan ke

9
dalam cluster yang sama dan 2 dokumen yang berbeda dipisahkan ke cluster yang
berbeda. Formula RI dituliskan sebagai berikut:
RI =

TP +TN
TP +FP+FN+TN

dengan
RI : Rand index
TP : true positive / keputusan 2 dokumen mirip berada di cluster yang sama
FP : false positive / keputusan 2 dokumen berbeda berada di cluster yang sama
TN : true negative / keputusan 2 dokumen berbeda berada di cluster yang berbeda
FN : false negative / keputusan 2 dokumen mirip berada di cluster yang berbeda

Perbandingan dengan Penelitian Sebelumnya
Hasil dari penelitian ini kemudian dibandingkan dengan hasil penelitian
sebelumnya. Variabel yang dibandingkan antara lain jumlah clusters yang
dihasilkan, ukuran akurasi hasil clustering-nya, dan lama waktu clustering.
Selanjutnya berdasarkan hasil perbandingan tersebut, dapat dianalisis kelebihan
dan kekurangan pendeteksian penjiplakan pada penelitian ini dibandingkan
dengan penelitian sebelumnya.

Alat
Perangkat keras:
 Processor Intel Core i3-2328M 2.20 GHz,
 Read Access Memory 2 GB, dan
 Hard disk 500 GB.








Perangkat lunak:
Operating system Microsoft Windows 7 Professional 64-bit,
Programming language PHP 5.3.8,
PHP Integrated Development Environment Netbeans for PHP 7.1.2,
Server control panel XAMPP 1.7.7,
Database management system MySQL,
C Integrated Development Environtment Dev-C++ 4.9.9.2, dan
Web browser Mozilla Firefox 19.0.2.

10

HASIL DAN PEMBAHASAN
Pengambilan dan Pemilihan Data
Data yang digunakan pada penelitian ini adalah kode-kode program tugas
pemrograman berbahasa C. Jumlah data sebanyak 233 kode program yang dipilih
dari 3 tugas dengan kesulitan menengah. Masing-masing tugas tersebut kemudian
dijadikan set data pada penelitian ini. Tabel 2 menunjukkan komposisi set data
yang digunakan pada penelitian ini. Contoh kode program dari masing-masing set
data penelitian ini dapat dilihat pada Lampiran 1.
Tabel 2 Set data awal
Set data
DataSet1
DataSet2
DataSet3
DataSetAll

Jumlah dokumen
92
75
66
233

Pengelompokan Manual
Pengelompokan manual dilakukan dengan memeriksa nilai output program
dan struktur kode programnya. Khusus untuk DatSet1, penelitian ini
menggunakan hasil pengelompokan manual yang sudah dilakukan oleh Gumilang
(2013). Hasil pengelompokan manual untuk DatSet1 dapat dilihat pada Lampiran
2. Pemeriksaan nilai output kode program pada DataSet2 menghasilkan 5 clusters,
sedangkan pada pemeriksaan DataSet3 menghasilkan 1 cluster. Setiap kode
program pada masing-masing clusters tersebut kemudian dibandingkan
strukturnya. Setelah dibandingkan, didapat DatSet2 menghasilkan 14 clusters
kode program dan DataSet3 menghasilkan 12 clusters. Namun, dari semua
clusters yang dihasilkan tersebut, terdapat clusters yang hanya berisi 1 atau 2 kode
program. Clusters yang berisi terlalu sedikit dokumen tersebut kemudian
dihilangkan. Tabel 3 menunjukkan set data setelah dilakukan pengelompokan
manual. Hasil pengelompokan manual untuk DataSet2 dan DataSet3 dapat dilihat
pada Lampiran 3 dan 4. Hasil pengelompokan manual untuk DataSetAll adalah 17
clusters gabungan hasil pengelompokan manual set data lainnya.
Tabel 3 Set data setelah pengelompokan manual
Set data
DataSet1
DataSet2
DataSet3
DataSetAll

Jumlah dokumen
92
60
60
212

Clusters manual
9
2
6
17

11
Praproses Data
Praproses data terbagi dalam beberapa tahapan, yaitu: pembuangan
preprocessor directives, tokenisasi, penyederhanaan, dan N-gram. Pembuangan
preprocessor directives dilakukan karena pada penelitian ini diasumsikan tidak
adanya penggunaan makro pada kode program. Berikut contoh kode program dari
DataSet1 yang telah dihilangkan preprocessor directives-nya:
1
2 main()
3 {
4
unsigned long int a,n=0;
5
long int b=0;
6
scanf("%lu", &a); //baca input
7
while ((pow(10,n++))